MenuBar

      在〈MenuBar〉中尚無留言

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

python_menu

todo

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *