wxPython - อินเทอร์เฟซเอกสารหลายรายการ
แอปพลิเคชัน GUI ทั่วไปอาจมีหลายหน้าต่าง วิดเจ็ตแบบแท็บและแบบเรียงซ้อนช่วยให้สามารถเปิดใช้งานหน้าต่างดังกล่าวได้ครั้งละหนึ่งหน้าต่าง อย่างไรก็ตามหลายครั้งวิธีนี้อาจไม่มีประโยชน์เนื่องจากมุมมองของหน้าต่างอื่น ๆ ถูกซ่อนไว้
วิธีหนึ่งในการแสดงหลายหน้าต่างพร้อมกันคือการสร้างเป็นหน้าต่างอิสระ สิ่งนี้เรียกว่า SDI (Single Document Interface). สิ่งนี้ต้องการทรัพยากรหน่วยความจำมากขึ้นเนื่องจากแต่ละหน้าต่างอาจมีระบบเมนูแถบเครื่องมือและอื่น ๆ ของตัวเอง
กรอบงาน 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()
รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -