2011-11-26 13 views
3

你好,我已經創建了2幀,當我運行這個程序時,它會顯示每個幀作爲他們自己的應用程序(至少在Windows上)。有沒有辦法使用這兩個框架,但把它們放在一個應用程序?如何使用wxpython將2個框架放在1個應用程序中?

import wx 

class MainFrame(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None, wx.NewId(), "Main") 
     self.sizer = wx.BoxSizer(wx.VERTICAL) 
     self.button = wx.Button(self, wx.NewId(), "Open a child") 
     self.sizer.Add(self.button, proportion=0, border=2, flag=wx.ALL) 
     self.SetSizer(self.sizer) 
     self.button.Bind(wx.EVT_BUTTON, self.on_button) 

     self.Layout() 

    def on_button(self, evt): 
     frame = ChildFrame(self) 
     frame.Show(True) 
     frame.MakeModal(True) 

class ChildFrame(wx.Frame): 
    def __init__(self, parent): 
     wx.Frame.__init__(self, parent, wx.NewId(), "Child") 
     self.Bind(wx.EVT_CLOSE, self.on_close) 

    def on_close(self, evt): 
     self.MakeModal(False) 
     evt.Skip() 

class MyApp(wx.App): 
    def OnInit(self): 
     frame = MainFrame() 
     frame.Show(True) 
     self.SetTopWindow(frame) 
     return True 

app = MyApp(0) 
app.MainLoop()  

這裏是不希望我的圖像: http://i.stack.imgur.com/7gayc.png

這是我不想要什麼, 我想兩個框架是在一個應用程序。

+0

你能提供一個應用程序的例子,它可以完成你/你想做的事情嗎?我*猜測*這是MDI,但我對這個猜測並不是很有信心。 – millimoose

+0

(PS:不要做MDI,沒有人喜歡MDI。) – millimoose

回答

4

這些幀已經在同一個wxPython應用程序(MyApp)中運行。
也許你的意思是在相同的wxPython窗口中有兩個框架/窗口。

我認爲這是不可能的,因爲wx.Frame類定義是一個獨立的窗口。

你可以做很容易就是修改當前的類從wx.Panel,而不是從wx.Frame獲得,然後把兩個面板在同一個公共幀。

例如,對於ChildFrame修改如下:

class ChildPanel(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent, wx.NewId()) 
    ......................................... 

然後創建共同的框架和instatiate您的面板(和它們放置在定徑機):

class Common(wx.Frame): 
    def __init__(self, parent): 
     wx.Frame.__init__(self, parent, wx.NewId(), "Common") 
     self.Bind(wx.EVT_CLOSE, self.on_close) 

     self.child = ChildPanel(self, .....) 
     self.main = MainPanel(self, .....) 

     ................... 

如果按照建議在Inerdial的評論,你實際上是在尋找MDI窗口:

enter image description here

然後你必須使用wx.MDIParentFrame和wx.MDIChildFrame的類。例如,檢查wxPython docs and demos包中的MDIDemo.py示例。請注意,雖然wxPython支持多文檔交互窗口,但Windows已棄用MDI。

+0

有沒有辦法在「MainFrame」內做到這一點,而不是創建一個新的類 – thelost

+0

感謝您的偉大答案 – thelost

+1

你仍然可以給和額外的upvote(up箭頭)! – joaquin

0

我認爲在初始化子框架時,將參數wx.FRAME_NO_TASKBAR作爲子框架的樣式選項可以解決問題。

相關問題