Учебники

wxPython — многодокументный интерфейс

Типичное приложение с графическим интерфейсом может иметь несколько окон. Виджеты с вкладками и с накоплением позволяют активировать одно такое окно одновременно. Однако во многих случаях этот подход может оказаться бесполезным, поскольку вид других окон скрыт.

Один из способов одновременного отображения нескольких окон — это создать их как независимые окна. Это называется SDI ( интерфейс с одним документом ). Это требует больше ресурсов памяти, так как каждое окно может иметь свою собственную систему меню, панель инструментов и т. Д.

Инфраструктура MDI в wxPython предоставляет класс 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()

Приведенный выше код производит следующий вывод —