wxPython多文件介面


一個典型的GUI應用程式可以有多個視窗。標籤和堆疊部件一次允許啟用一個這樣的視窗。然而,很多時候這種方法可能不是有用,因為其他視窗可能是隱藏的。

同時顯示多個視窗的一種方法是建立它們作為獨立的視窗。這被稱為SDI(單文件介面)。這需要更多的儲存器資源,每個視窗可以具有其自己的選單系統,工具列等等

在wxPython中的MDI框架提供了wx.MDIParentFrame類。其物件充當容器為多個子視窗,每個物件是wx.MDIChildFrame類。
子視窗位於父框架的MDIClientWindow區域。當一個孩子影格新增,父框架的選單欄將顯示包含子視窗按鈕排放在級聯或平鋪方式在選單。

範例

下面的例子演示MDIParentFrame的用途為頂層視窗。選單按鈕被稱為NewWindow增加在客戶區的子視窗。多個視窗可以被新增,然後設定為層疊或平鋪順序。

完整的程式碼如下 -
import wx 
 
class MDIFrame(wx.MDIParentFrame): 
   def __init__(self): 
      wx.MDIParentFrame.__init__(self, None, -1, "MDI Parent - www.tw511.com", size = (600,400)) 
      menu = wx.Menu() 
      menu.Append(5000, "&New Window") 
      menu.Append(5001, "&Exit") 
      menubar = wx.MenuBar() 
      menubar.Append(menu, "&File") 
		
      self.SetMenuBar(menubar) 
      self.Bind(wx.EVT_MENU, self.OnNewWindow, id = 5000) 
      self.Bind(wx.EVT_MENU, self.OnExit, id = 5001) 
		
   def OnExit(self, evt): 
      self.Close(True)  
		
   def OnNewWindow(self, evt): 
      win = wx.MDIChildFrame(self, -1, "Child Window")
      win.Show(True) 
		
app = wx.App() 
frame = MDIFrame() 
frame.Show() 
app.MainLoop()
上面的程式碼產生下面的輸出 -