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", 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 output