📅  最后修改于: 2020-11-05 04:59:52             🧑  作者: Mango
典型的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()
上面的代码产生以下输出-