wxPython - interfejs wielu dokumentów
Typowa aplikacja GUI może mieć wiele okien. Widżety na kartach i w stosach umożliwiają aktywowanie jednego takiego okna na raz. Jednak często takie podejście może nie być przydatne, ponieważ widok innych okien jest ukryty.
Jednym ze sposobów jednoczesnego wyświetlania wielu okien jest utworzenie ich jako niezależnych okien. Nazywa się to SDI (Single Document Interface). Wymaga to więcej zasobów pamięci, ponieważ każde okno może mieć własny system menu, pasek narzędzi itp.
Framework MDI w wxPython udostępnia klasę wx.MDIParentFrame. Jego obiekt działa jako kontener dla wielu okien potomnych, z których każde jest obiektem klasy wx.MDIChildFrame.
Okna podrzędne znajdują się w obszarze MDIClientWindow ramki nadrzędnej. Zaraz po dodaniu ramki podrzędnej na pasku menu ramki nadrzędnej pojawia się menu Okno zawierające przyciski do układania elementów podrzędnych w sposób kaskadowy lub kafelkowy.
Przykład
Poniższy przykład ilustruje użycie MDIParentFrame jako okna najwyższego poziomu. Przycisk Menu o nazwie NewWindow dodaje okno potomne w obszarze roboczym. Można dodać wiele okien, a następnie ustawić je w kolejności kaskadowej lub kafelkowej.
Kompletny kod wygląda następująco -
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()
Powyższy kod daje następujące dane wyjściowe -