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()

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -