当前位置: 首页 > 文档资料 > wxPython 中文教程 >

多文档界面(Multiple Document Interface)

优质
小牛编辑
140浏览
2023-12-01

典型的GUI应用程序可以具有多个窗口。 选项卡式和堆叠式小部件允许一次激活一个这样的窗口。 但是,很多时候这种方法可能没有用,因为隐藏了其他窗口的视图。

同时显示多个窗口的一种方法是将它们创建为独立窗口。 这称为SDI( Single Document Interface )。 这需要更多的内存资源,因为每个窗口可能有自己的菜单系统,工具栏等。

wxPython中的MDI框架提供了一个wx.MDIParentFrame类。 它的对象充当多个子窗口的容器,每个子窗口都是wx.MDIChildFrame类的对象。

子窗口驻留在父框架的MDIClientWindow区域中。 添加子框架后,父框架的菜单栏会显示一个窗口菜单,其中包含用于以级联或平铺方式排列子项的按钮。

例子 (Example)

以下示例说明了MDIParentFrame作为顶级窗口的用法。 名为NewWindow的菜单按钮在客户区域中添加子窗口。 可以添加多个窗口,然后以级联或平铺顺序排列。

完整的代码如下 -

import wx 
class MDIFrame(wx.MDIParentFrame): 
   def __init__(self): 
      wx.MDIParentFrame.__init__(self, None, -1, "MDI Parent", 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()

上面的代码产生以下输出 -

MDI输出