多文檔界面的子視窗排列
-
- 程式目的
- 程式界面
- 程式代碼
程式目的
在使用 wxpython 的多文檔界面 MDI 時,當新增子視窗時,主視窗會自動出現 Window 菜單,并帶有 Cascade、Tile 等功能。如何使用這些菜單項來實作相應的功能呢?
程式界面
程式代碼
- 在點選 Window 菜單的 Cascade 等菜單項時,會産生一個菜單事件,利用系統預定義的事件 ID 就能很容易的實作所需的功能。
- 如點選 CasCade 菜單項時,其對應的 ID 是 wx.ID_MDI_WINDOW_CASCADE,對應的功能是 self.Cascade()
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(wx.ID_NEW, "&New Window")
menu.Append(wx.ID_EXIT, "&Exit")
menubar = wx.MenuBar()
menubar.Append(menu, "&File")
self.SetMenuBar(menubar)
self.Bind(wx.EVT_MENU, self.menu_handler)
def menu_handler(self, event):
eid = event.GetId()
if eid == wx.ID_EXIT:
self.Close(True)
elif eid == wx.ID_NEW:
win = wx.MDIChildFrame(self, -1, "Child Window")
win.Show()
# 視窗排列樣式
elif eid == wx.ID_MDI_WINDOW_CASCADE:
self.Cascade()
elif eid == wx.ID_MDI_WINDOW_TILE_HORZ:
self.Tile()
elif eid == wx.ID_MDI_WINDOW_TILE_VERT:
self.Tile(wx.VERTICAL)
elif eid == wx.ID_MDI_WINDOW_ARRANGE_ICONS:
self.ArrangeIcons()
elif eid == wx.ID_MDI_WINDOW_NEXT:
self.ActivateNext()
elif eid == wx.ID_MDI_WINDOW_PREV:
self.ActivatePrevious()
else:
print(eid)
app = wx.App()
frame = MDIFrame()
frame.Center()
frame.Show()
app.MainLoop()