[Python] wxPython 菜單欄控件學習總結(原創)


1、總結

  1、大體創建過程

    1、創建一個 菜單欄  : menuBar = wx.MenuBar()

      

      相當於這個白色地方,沒有File這個菜單

    2、創建 菜單 : fileMenu = wx.Menu()

      

      這兩個不是直接“用的”,叫菜單。既用來分類其他 菜單項 的文件夾樣

    3、創建 菜單項 : newItem = wx.MenuItem()

      例如上圖的 New Copy Cut Paste Radio_One 等等等等。

      這些可以直接“點”的(看作按鈕)的叫做 菜單項。

      創建的時候需要分配 id (int 整數),到時候菜單事件處理的時候需要通過傳遞的 id (event.GetId())來判斷單擊的按鈕。

    4、將 菜單項 添加到 菜單中 : fileMenu.AppendItem(newItem)

      這樣當我們單機 File 的時候就會打開這個"文件夾"

      

      並且展示內容,添加多少就展示多少,並且按添加的順序展示

    5、將 菜單 添加到 菜單欄 中 : menuBar.Append(fileMenu, title = "File")

      之前我們只是構建了一個上圖紅框+File菜單 的一個整體對象:fileMenu。

      然后我們要把這個 菜單對象 添加到菜單欄中。

    6、將該 菜單欄 設置為我們窗口框架的“菜單欄” : self.SetMenuBar(menuBar)

      即將之前建立的 菜單欄對象 放到窗口上去。

    7、綁定 菜單事件 : self.Bind(wx.EVT_MENT, self.menuHandler)

      調用 Bind() 這個綁定事件的函數,因為其他組件 比如按鈕 編輯框 都有事件。

      所以這里的 wx.EVT_MENT 是表示綁定的是 菜單事件。

      menuHandler() 是自定義函數 用來菜單事件。

      

      id = event.GetId() 用來判斷單擊的 菜單項。

      函數參數名稱:event 不能變,只能是這個單詞。

    8、窗口框架的處理 : 與菜單欄無關了

      例如 調整大小、出現位置、是否可見

      

   2、各項詳解(參考其他)

    1、用到的 class :

      菜單欄 : wx.MenuBar 類

      wx.MenuBar() 
      wx.MenuBar(n, menus, titles, style)

      有一個參數的構造函數,此外還有一個默認的。

      參數“n”表示的菜單的數目。Menu是菜單和標題的數組和字符串數組。如果style參數設置為wx.MB_DOCKABLE,菜單欄可以停靠。

      

      菜單 : wx.Menu 類

      wx.Menu類對象是一個或多個菜單項,其中一個可被用戶選擇的下拉列表。

        

       該開始 new 菜單對象的時候 只要 fileMenu = wx.Menu() 即可

      之后添加菜單項目的時候,可直接使用 Append() 函數添加,或 wx.MenuItem 類的一個對象被追加。

      wx.Menu.Append(id, text, kind)
        
      Item = Wx.MenuItem(parentmenu, id, text, kind) 
      wx.Menu.Append(Item)

 

      菜單項:wx.MenuItem 類

      當我們 new 菜單項對象時 需要填幾個參數。

newItem = wx.MenuItem(parentMenu, id, text, kind)

 

      其中 :

      parentMenu 為其 菜單的對面,比如上文提到的 newMenu 菜單項的 parentMenu 為 fileMenu

      id 為該菜單項的 id 到時候處理 菜單項時間的時候需要用到滴

      text 為這個菜單項的名稱

      kind 為該菜單項的類型

      ①注冊 快捷鍵的方法 :參數text = "名稱/t快捷鍵"

      比如 text = "Quit/tCtrl+Q"

      這樣就注冊了 Ctrl + Q 的快捷鍵

      ②其他類型菜單項的方法

      菜單項有 3 種:

      

      只需要 參數 kind = 相關類型常量即可

2、感想

  期間看了找了挺多資料 : http://www.yiibai.com/wxpython/wxpython_menus.html#

  這個里面的很詳細,且例子經典。

  o.o 要是先看不懂,就敲抄一邊會好很多。

  關於wxPyton 中菜單欄的運用的,以下代碼能夠很好的展示相關的操作方法。

3、樣例代碼

  

 1 #coding:utf-8
 2 #author:Twobox
 3 
 4 import wx
 5 
 6 class Mywin(wx.Frame):
 7     def __init__(self, parent, title):
 8         super(Mywin, self).__init__(parent, title = title)
 9         self.InitUI()
10 
11     def InitUI(self):
12         #創建一個菜單欄
13         menuBar = wx.MenuBar()
14 
15         #創建一個菜單 1
16         fileMenu = wx.Menu()
17 
18         #創建一個菜單項 1-1
19         newItem = wx.MenuItem(fileMenu, id = wx.ID_NEW, text = 'New', kind = wx.ITEM_NORMAL)
20         fileMenu.AppendItem(newItem)
21 
22         #添加一行線
23         fileMenu.AppendSeparator()
24 
25         #創建一個子菜單 1-2
26         editMenu = wx.Menu()
27 
28         #創建三個子菜單的菜單項目 1-2-1 and 1-2-2 and 1-2-3
29         cutItem = wx.MenuItem(editMenu, id = 122, text = "Cut", kind = wx.ITEM_NORMAL)
30         copyItem = wx.MenuItem(editMenu, id = 121, text = "Copy", kind = wx.ITEM_NORMAL)
31         pasteItem = wx.MenuItem(editMenu, id = 123, text = "Paste", kind = wx.ITEM_NORMAL)
32         editMenu.AppendItem(copyItem)
33         editMenu.AppendItem(cutItem)
34         editMenu.AppendItem(pasteItem)
35 
36         #把子菜單 1-2 添加到菜單 1 中
37         fileMenu.AppendMenu(wx.ID_ANY, "Edit", editMenu)
38 
39         # 添加一行線
40         fileMenu.AppendSeparator()
41 
42         #添加兩個單選框 1-3 and 1-4
43         radio1 = wx.MenuItem(fileMenu, id = 13, text = "Radio_One", kind = wx.ITEM_RADIO)
44         radio2 = wx.MenuItem(fileMenu, id = 14, text = "Radio_Two", kind = wx.ITEM_RADIO)
45         fileMenu.AppendItem(radio1)
46         fileMenu.AppendItem(radio2)
47         #PS.單選框 只在自己區域之間(兩行線之間) 相互作用
48 
49         # 添加一行線
50         fileMenu.AppendSeparator()
51 
52         #添加一個 可選中 的菜單項 1-5
53         fileMenu.AppendCheckItem(id = 15, item = "Check")
54 
55         #添加一個 菜單項 1-6 並注冊快捷鍵
56         quit = wx.MenuItem(fileMenu, id = wx.ID_EXIT, text = "Quit\tCtrl+Q", kind = wx.ITEM_NORMAL)
57         fileMenu.AppendItem(quit)
58 
59         #將 fileMenu 菜單添加到菜單欄中
60         menuBar.Append(fileMenu, title = 'File')
61 
62         #設置窗口框架的菜單欄為 menuBar
63         self.SetMenuBar(menuBar)
64 
65         #綁定事件處理
66         self.Bind(wx.EVT_MENU, self.menuHandler)
67 
68         #讓其在屏幕中間打開調整大小展示
69         self.SetSize((300,400))
70         self.Centre()
71         self.Show()
72 
73     def menuHandler(self, event):
74         id = event.GetId()
75         if id == wx.ID_NEW:
76             print("NEW")
77         if id == wx.ID_EXIT:
78             exit(0)
79 
80 
81 
82 if __name__ == "__main__":
83     ex = wx.App()
84     Mywin(None, 'Menu - Test')
85     #Mywin(None, 'Menu - Test')      #可以同時打開兩個窗口  果然體現面向對象的程序開發思想
86     ex.MainLoop()

2017-08-20 14:21:26

 

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM