MenuBar
選單條menuBar需使用 wx.MenuBar()產生, 不需任何參數. 最後由 frame.SetMenuBar(menuBar)加入 frame之中
Menu
每一個選單如menuFile由wx.Menu()產生, 亦不需任何參數, 然後由menuBar.Append(menuFile, “檔案(&F))加入選單條中. 第二參數的 “&” 則為快速鍵
MenuItem
選單項如item_open_new_file由wx.MenuItem(parent, id, text, kind)產生. 選單項是需要參數的. 然後由 menuFile.Append(iem_open_new_file)將選單項加入選單中.
Menu加入Menu
在選單(menuFile)中要加入子選單(menuFileNew), 則需使用menuFile.AppendSubMenu(menuFileNew, “New(&N)”
選單事件
選單事件需由 frame綁定, frame.Bind(wx.EVT_MENU, MenuHandler). MenuHandler則為事件觸發後要執行的函數
完整代碼
下面代碼中, 有設定視窗(frame)的Icon. 在Python蠻特殊的, Icon不一定要用ico檔, 使用 jpg, png皆可以
import wx class MainWindow(wx.App): ID_OPEN_NEW_FILE=1 ID_OPEN_NEW_PROJECT=2 ID_OPEN_OLD_FILE=3 ID_CLOSE=4 def OnInit(self): frame = wx.Frame(parent=None, title="AIot Patrol System",style=wx.MAXIMIZE |wx.DEFAULT_FRAME_STYLE) frame.SetIcon(wx.Icon("icon/logo.png", wx.BITMAP_TYPE_PNG)) #選單條 menuBar=wx.MenuBar() #檔案選單 menuFile=wx.Menu() #New子選單 menuFileNew=wx.Menu() item_open_new_file=wx.MenuItem(menuFileNew,self.ID_OPEN_NEW_FILE,text="開新檔案(&F)", kind=wx.ITEM_NORMAL) item_open_new_file.SetBitmap(wx.Bitmap("icon/new_file.png")) menuFileNew.Append(item_open_new_file) item_open_new_project=wx.MenuItem(menuFileNew,self.ID_OPEN_NEW_PROJECT,text="開新專案(&P)", kind=wx.ITEM_NORMAL) menuFileNew.Append(item_open_new_project) menuFile.AppendSubMenu(menuFileNew, "New(&N)") #開啟舊檔選單項目 item_open_old_file = wx.MenuItem(menuFile, self.ID_OPEN_OLD_FILE, text="開啟舊檔(&O)", kind=wx.ITEM_NORMAL) menuFile.Append(item_open_old_file) #加入分隔線 menuFile.AppendSeparator() item_close = wx.MenuItem(menuFile, self.ID_CLOSE, text="結束(&C)", kind=wx.ITEM_NORMAL) menuFile.Append(item_close) #編輯選單 menuEdit=wx.Menu() #選單條加入選單 menuBar.Append(menuFile, "檔案(&F)") menuBar.Append(menuEdit,"編輯(&E)") frame.SetMenuBar(menuBar) #綁定選單事件 self.Bind(wx.EVT_MENU, self.MenuHandler) panel=wx.Panel(frame,-1) frame.Show() return True def MenuHandler(self, event): id=event.GetId() if id==self.ID_OPEN_NEW_FILE: wx.MessageBox("開新檔案") elif id==self.ID_OPEN_NEW_PROJECT: wx.MessageBox("開新專案") elif id==self.ID_OPEN_OLD_FILE: wx.MessageBox("開啟舊檔") elif id==self.ID_CLOSE: self.ExitMainLoop() MainWindow().MainLoop()
todo