wxPython - Nhiều giao diện tài liệu
Một ứng dụng GUI điển hình có thể có nhiều cửa sổ. Các widget được xếp theo thẻ và xếp chồng lên nhau cho phép kích hoạt một cửa sổ như vậy cùng một lúc. Tuy nhiên, nhiều khi cách tiếp cận này có thể không hữu ích vì chế độ xem các cửa sổ khác bị ẩn.
Một cách để hiển thị nhiều cửa sổ đồng thời là tạo chúng dưới dạng các cửa sổ độc lập. Đây được gọi là SDI (Single Document Interface). Điều này đòi hỏi nhiều tài nguyên bộ nhớ hơn vì mỗi cửa sổ có thể có hệ thống menu, thanh công cụ, v.v.
Khuôn khổ MDI trong wxPython cung cấp một lớp wx.MDIParentFrame. Đối tượng của nó hoạt động như một vùng chứa cho nhiều cửa sổ con, mỗi cửa sổ là một đối tượng của lớp wx.MDIChildFrame.
Các cửa sổ con nằm trong vùng MDIClientWindow của khung mẹ. Ngay sau khi một khung con được thêm vào, thanh menu của khung mẹ sẽ hiển thị menu Cửa sổ chứa các nút để sắp xếp các khung con theo cách xếp tầng hoặc xếp lớp.
Thí dụ
Ví dụ sau minh họa việc sử dụng MDIParentFrame làm cửa sổ cấp cao nhất. Nút Menu được gọi là NewWindow thêm một cửa sổ con trong khu vực máy khách. Nhiều cửa sổ có thể được thêm vào và sau đó sắp xếp theo thứ tự xếp tầng hoặc lát gạch.
Mã hoàn chỉnh như sau:
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()
Đoạn mã trên tạo ra kết quả sau: