wxPython - Çoklu Belge Arayüzü
Tipik bir GUI uygulamasının birden çok penceresi olabilir. Sekmeli ve yığılmış widget'lar, bir seferde bu tür bir pencereyi etkinleştirmeye izin verir. Ancak, diğer pencerelerin görünümü gizlendiğinden, çoğu zaman bu yaklaşım yararlı olmayabilir.
Birden çok pencereyi aynı anda görüntülemenin bir yolu, onları bağımsız pencereler olarak oluşturmaktır. Buna SDI (Single Document Interface). Bu, her pencere kendi menü sistemine, araç çubuğuna vb. Sahip olabileceğinden daha fazla bellek kaynağı gerektirir.
WxPython'daki MDI çerçevesi, bir wx.MDIParentFrame sınıfı sağlar. Nesnesi, her biri wx.MDIChildFrame sınıfının bir nesnesi olan birden çok alt pencere için bir kap görevi görür.
Alt pencereler, üst çerçevenin MDIClientWindow alanında bulunur. Bir alt çerçeve eklenir eklenmez, ana çerçevenin menü çubuğu, çocukları basamaklı veya döşemeli bir şekilde düzenlemek için düğmeler içeren bir Pencere menüsü gösterir.
Misal
Aşağıdaki örnek, MDIParentFrame'in en üst düzey pencere olarak kullanımını göstermektedir. NewWindow adlı bir Menü düğmesi, istemci alanına bir alt pencere ekler. Birden çok pencere eklenebilir ve ardından kademeli veya döşemeli bir sırada düzenlenebilir.
Kodun tamamı aşağıdaki gibidir -
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()
Yukarıdaki kod aşağıdaki çıktıyı üretir -