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、感想
這個里面的很詳細,且例子經典。
o.o 要是先看不懂,就敲抄一邊會好很多。
關于wxPyton 中菜單欄的運用的,以下代碼能夠很好的展示相關的操作方法。
3、樣例代碼
#coding:utf-8
#author:Twobox
import wx
class Mywin(wx.Frame):
def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title)
self.InitUI()
def InitUI(self):
#創建一個菜單欄
menuBar = wx.MenuBar()
#創建一個菜單 1
fileMenu = wx.Menu()
#創建一個菜單項 1-1
newItem = wx.MenuItem(fileMenu, id = wx.ID_NEW, text = 'New', kind = wx.ITEM_NORMAL)
fileMenu.AppendItem(newItem)
#添加一行線
fileMenu.AppendSeparator()
#創建一個子菜單 1-2
editMenu = wx.Menu()
#創建三個子菜單的菜單項目 1-2-1 and 1-2-2 and 1-2-3
cutItem = wx.MenuItem(editMenu, id = 122, text = "Cut", kind = wx.ITEM_NORMAL)
copyItem = wx.MenuItem(editMenu, id = 121, text = "Copy", kind = wx.ITEM_NORMAL)
pasteItem = wx.MenuItem(editMenu, id = 123, text = "Paste", kind = wx.ITEM_NORMAL)
editMenu.AppendItem(copyItem)
editMenu.AppendItem(cutItem)
editMenu.AppendItem(pasteItem)
#把子菜單 1-2 添加到菜單 1 中
fileMenu.AppendMenu(wx.ID_ANY, "Edit", editMenu)
# 添加一行線
fileMenu.AppendSeparator()
#添加兩個單選框 1-3 and 1-4
radio1 = wx.MenuItem(fileMenu, id = 13, text = "Radio_One", kind = wx.ITEM_RADIO)
radio2 = wx.MenuItem(fileMenu, id = 14, text = "Radio_Two", kind = wx.ITEM_RADIO)
fileMenu.AppendItem(radio1)
fileMenu.AppendItem(radio2)
#PS.單選框 只在自己區域之間(兩行線之間) 相互作用
# 添加一行線
fileMenu.AppendSeparator()
#添加一個 可選中 的菜單項 1-5
fileMenu.AppendCheckItem(id = 15, item = "Check")
#添加一個 菜單項 1-6 并注冊快捷鍵
quit = wx.MenuItem(fileMenu, id = wx.ID_EXIT, text = "Quit\tCtrl+Q", kind = wx.ITEM_NORMAL)
fileMenu.AppendItem(quit)
#將 fileMenu 菜單添加到菜單欄中
menuBar.Append(fileMenu, title = 'File')
#設置窗口框架的菜單欄為 menuBar
self.SetMenuBar(menuBar)
#綁定事件處理
self.Bind(wx.EVT_MENU, self.menuHandler)
#讓其在屏幕中間打開調整大小展示
self.SetSize((300,400))
self.Centre()
self.Show()
def menuHandler(self, event):
id = event.GetId()
if id == wx.ID_NEW:
print("NEW")
if id == wx.ID_EXIT:
exit(0)
if __name__ == "__main__":
ex = wx.App()
Mywin(None, 'Menu - Test')
#Mywin(None, 'Menu - Test') #可以同時打開兩個窗口 果然體現面向對象的程序開發思想
ex.MainLoop()
2017-08-20 14:21:26
[Python] wxPython 基本控件 (轉)
轉自:http://www.cnblogs.com/wangjian8888/p/6028777.html 一.靜態文本控件 wx.StaticText(parent, id, label, pos= ...
[Python] wxPython 編輯框組件學習總結 (原創)
1.總結 1.常用4種 編輯框 的構造 1.普通編輯框 單行輸入的簡單編輯框 (?為所在框的對象,同下) self.textBox = wx.TextCtrl(parent = ?) 2.密碼編輯框 ...
python之Tkinter控件學習
轉載自 ?http://www.cnblogs.com/kaituorensheng/p/3287652.html#_label0 閱讀目錄 1.?產品介紹 2.?設計規劃 3. 相關知識 4. 源碼 ...
Python Tkinter 基礎控件學習
# -*- coding: utf-8 -*- from Tkinter import * def btn_click(): b2['text'] = 'clicked' evalue = e.get ...
wxPython控件學習之wx.grid.Grid 表格控件
wxPython控件學習之wx.grid.Grid (包括對GridCellEditor和GridCelRender的擴展,以支持更多的grid cell 樣式, 以GridCellColorEdit ...
轉)delphi chrome cef3 控件學習筆記 (二)
(轉)delphi chrome cef3 控件學習筆記 (二) https://blog.csdn.net/risesoft2012/article/details/51260832 原創?2016 ...
IOS學習筆記(四)之UITextField和UITextView控件學習
IOS學習筆記(四)之UITextField和UITextView控件學習(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
DevExpress控件學習總結(轉)
DevExpress控件學習總結 ? 1.Navigation?&?Layout 1.1?Bar?Manager 如果想在窗體或用戶控件(user?control)上添加工具條(bars)或彈 ...
Python Tkinter基礎控件入門實例
分享一個Python Tkinter基礎控件用法的入門例子,包括窗口的顯示.顯示內置圖片.彈出窗口.菜單等. 例子,Python Tkinter基礎控件的用法 # -*- coding: utf-8 ...
隨機推薦
mac的webdriver自動化
下載webdriver-chrome的連接:http://chromedriver.storage.googleapis.com/index.html
MVVM小記
這篇小記源自于codeproject上的一篇文章?http://www.codeproject.com/Articles/100175/Model-View-ViewModel-MVVM-Explai ...
深入理解計算機系統(2.2)---布爾代數以及C語言上的位運算
布爾代數上的位運算 布爾代數是一個數學知識體系,它在0和1的二進制值上演化而來的. 我們不需要去徹底的了解這個知識體系,但是里面定義了幾種二進制的運算,卻是我們在平時的編程過程當中也會遇到的.這四種運 ...
JS中的集中頁面跳轉的方法
第一種:???
style中position的屬性值具體解釋
Position的英文原意是指位置.職位.狀態.也有安置的意思.在CSS布局中,Position發揮著非常關鍵的數據,非常多容器的定位是用Position來完畢. Position屬性有四個可選值,它 ...
渲染函數render和函數式組件
vnode對象 vnode對象包括(vnode并不是vue實例,而是vue實例中渲染函數render執行后生成的結果) this.tag = tag // 當前節點標簽名 this.data = da ...
cookie、localStorage、sessionStorage的區別
localStorage - 沒有時間限制的數據存儲 sessionStorage - 針對一個 session 的數據存儲 共同點:sessionStorage.localStorage和cooki ...
Visual Studio 2017 + Python3.6安裝scipy庫
Windows10下安裝scipy很麻煩,直接在命令行下使用pip install scipy無法安裝,但可以借助VS2017的集成環境來安裝. (1)首先在Visual Studio Install ...
How to calculate elapsed / execute time in Java
How to calculate elapsed / execute time in JavaIn Java, you can use the following ways to measure el ...