Python中Tkinter組件Menu的具體使用
Menu(菜單)組件用於實現頂級菜單、下拉菜單和彈出菜單。
何時使用 Menu 組件?
Menu 組件通常被用於實現應用程序上的各種菜單,由於該組件是底層代碼實現,所以不建議你自行通過按鈕和其他組件來實現菜單功能。
用法
創建一個頂級菜單,你需要先創建一個菜單實例,然後使用 add() 方法將命令和其它子菜單添加進去:
import tkinter as tk root = tk.Tk() def callback(): print("~被調用啦~") #創建一個頂級菜單 menubar = tk.Menu(root) menubar.add_command(label = "Hello", command = callback) menubar.add_command(label = "Quit", command = root.quit) #顯示菜單 root.config(menu = menubar) root.mainloop()
創建一個下拉菜單(或者其他子菜單),方法也是大同小異,最主要的區別是它們最後需要添加到主菜單上(而不是窗口上):
import tkinter as tk root = tk.Tk() def callback(): print("~被調用瞭~") # 創建一個頂級菜單 menubar = tk.Menu(root) # 創建一個下拉菜單“文件”,然後將它添加到頂級菜單中 filemenu = tk.Menu(menubar, tearoff=False) filemenu.add_command(label="打開", command=callback) filemenu.add_command(label="保存", command=callback) filemenu.add_separator() filemenu.add_command(label="退出", command=root.quit) menubar.add_cascade(label="文件", menu=filemenu) # 創建另一個下拉菜單“編輯”,然後將它添加到頂級菜單中 editmenu = tk.Menu(menubar, tearoff=False) editmenu.add_command(label="剪切", command=callback) editmenu.add_command(label="拷貝", command=callback) editmenu.add_command(label="粘貼", command=callback) menubar.add_cascade(label="編輯", menu=editmenu) # 顯示菜單 root.config(menu=menubar) root.mainloop()
創建一個彈出菜單方法也是一致的,不過需要使用 post() 方法明確的將其顯示出來:
import tkinter as tk root = tk.Tk() def callback(): print("~被調用瞭~") # 創建一個彈出菜單 menu = tk.Menu(root, tearoff=False) menu.add_command(label="撤銷", command=callback) menu.add_command(label="重做", command=callback) frame = tk.Frame(root, width=512, height=512) frame.pack() def popup(event): menu.post(event.x_root, event.y_root) # 綁定鼠標右鍵 frame.bind("<Button-3>", popup) root.mainloop()
參數
Menu(master=None, **options) (class)
master — 父組件
**options — 組件選項,下方表格詳細列舉瞭各個選項的具體含義和用法:
選項 | 含義 |
activebackground | 設置當 Menu 處於 "active" 狀態(通過 state 選項設置狀態)的背景色 |
activeborderwidth | 設置當 Menu 處於 "active" 狀態(通過 state 選項設置狀態)的邊框寬度 |
activeforeground | 設置當 Menu 處於 "active" 狀態(通過 state 選項設置狀態)的前景色 |
background | 設置背景顏色 |
bg | 跟 background 一樣 |
borderwidth | 指定邊框寬度 |
bd | 跟 borderwidth 一樣 |
cursor | 指定當鼠標在 Menu 上飄過的時候的鼠標樣式 |
disabledforeground | 指定當 Menu 處於 "disabled" 狀態的時候的前景色 |
font | 指定 Menu 中文本的字體 |
foreground | 設置 Menu 的前景色 |
fg | 跟 foreground 一樣 |
postcommand | 將此選項與一個方法相關聯,當菜單被打開的時候該方法將自動被調用 |
relief | 1. 指定邊框樣式 2. 默認值是 "flat" 3. 另外你還可以設置 "sunken","raised","groove" 或 "ridge" |
selectcolor | 指定當菜單項顯示為單選按鈕或多選按鈕時選擇中標志的顏色 |
tearoff | 1. 默認情況下菜單可以被“撕下”(點擊 IDLE 菜單上邊的 ——— 試試) 2. 將該選項設置為 Flase 關閉這一特性 |
tearoffcommand | 如果你希望當用戶“撕下”你的菜單時通知你的程序,那麼你可以將該選項與一個方法相關聯,那麼當用戶“撕下”你的菜單時,Tkinter 會帶著兩個參數去調用你的方法(一個參數是當前窗口的 ID,另一個參數是承載被“撕下”的菜單的窗口 ID) |
title | 默認情況下,被“撕下”的菜單標題是其主菜單的名字,不過你也可以通過修改此項的值來修改標題 |
方法
add(type, **options)
— type 參數指定添加的菜單類型,可以是:"command","cascade","checkbutton","radiobutton" 或 "separator"
— 還可以通過 options 選項設置菜單的屬性,下表列舉瞭 options 可以使用的選項和具體含義:
選項 | 含義 |
accelerator | 1. 顯示該菜單項的加速鍵(快捷鍵) 2. 例如 accelerator = "Ctrl+N" 3. 該選項僅顯示,並沒有實現加速鍵的功能(通過按鍵綁定實現) |
activebackground | 設置當該菜單項處於 "active" 狀態(通過 state 選項設置狀態)的背景色 |
activeforeground | 設置當該菜單項處於 "active" 狀態(通過 state 選項設置狀態)的前景色 |
background | 設置該菜單項的背景顏色 |
bitmap | 指定顯示到該菜單項上的位圖 |
columnbreak | 從該菜單項開始另起一列顯示 |
command | 將該選項與一個方法相關聯,當用戶點擊該菜單項時將自動調用此方法 |
compound | 1. 控制菜單項中文本和圖像的混合模式 2. 如果該選項設置為 "center",文本顯示在圖像上(文本重疊圖像) 3. 如果該選項設置為 "bottom","left","right" 或 "top",那麼圖像顯示在文本的旁邊(如 "bottom",則圖像在文本的下方 |
font | 指定文本的字體 |
foreground | 設置前景色 |
hidemargin | 是否顯示菜單項旁邊的空白 |
image | 1. 指定菜單項顯示的圖片 2. 該值應該是 PhotoImage,BitmapImage,或者能兼容的對象 |
label | 指定菜單項顯示的文本 |
menu | 1. 該選項僅在 cascade 類型的菜單中使用 2. 用於指定它的下級菜單 |
offvalue | 1. 默認情況下,variable 選項設置為 1 表示選中狀態,反之設置為 0 2. 設置 offvalue 的值可以自定義未選中狀態的值 |
onvalue | 1. 默認情況下,variable 選項設置為 1 表示選中狀態,反之設置為 0 2. 設置 onvalue 的值可以自定義選中狀態的值 |
selectcolor | 指定當菜單項顯示為單選按鈕或多選按鈕時選擇中標志的顏色 |
selectimage | 如果你在單選按鈕或多選按鈕菜單中使用圖片代替文本,那麼設置該選項指定被菜單項被選中時顯示的圖片 |
state | 1. 跟 text 選項一起使用,用於指定哪一個字符畫下劃線(例如用於表示鍵盤快捷鍵) |
underline | 1. 用於指定在該菜單項的某一個字符處畫下劃線 2. 例如設置為 1,則說明在該菜單項的第 2 個字符處畫下劃線 |
value | 1. 當菜單項為單選按鈕時,用於標志該按鈕的值 2. 在同一組中的所有按鈕應該擁有各不相同的值 3. 通過將該值與 variable 選項的值對比,即可判斷用戶選中瞭哪個按鈕 4. 如在使用上有不懂具體可以參照 Radiobutton 組件的說明 |
variable | 1. 當菜單項是單選按鈕或多選按鈕時,與之關聯的變量 2. 如在使用上有不懂具體可以參照:Checkbutton 和 Radiobutton 組件的說明 |
add_cascade(**options)
— 添加一個父菜單
— 相當於 add("cascade", **options)
add_checkbutton(**options)
— 添加一個多選按鈕的菜單項
— 相當於 add("checkbutton", **options)
add_command(**options)
— 添加一個普通的命令菜單項
— 相當於 add("command", **options)
add_radiobutton(**options)
— 添加一個單選按鈕的菜單項
— 相當於 add("radiobutton", **options)
add_separator(**options)
— 添加一條分割線
— 相當於 add("separator", **options)
delete(index1, index2=None)
— 刪除 index1 ~ index2(包含)的所有菜單項
— 如果忽略 index2 參數,則刪除 index1 指向的菜單項
— 註意:對於一個被“撕下”的菜單,你無法使用該方法
entrycget(index, option)
— 獲得指定菜單項的某選項的值
entryconfig(index, **options)
— 設置指定菜單項的選項
— 選項的參數及具體含義請參考上方 add() 方法
entryconfigure(index, **options)
— 跟 entryconfig() 一樣
index(index)
— 返回與 index 參數相應的選項的序號(例如 e.index("end"))
insert(index, itemType, **options)
— 插入指定類型的菜單項到 index 參數指定的位置
— itemType 參數指定添加的菜單類型,可以是:"command","cascade","checkbutton","radiobutton" 或 "separator"
— 選項的參數及具體含義請參考上方 add() 方法
insert_cascade(index, **options)
— 在 index 參數指定的位置添加一個父菜單
— 相當於 insert("cascade", **options)
insert_checkbutton(index, **options)
— 在 index 參數指定的位置添加一個多選按鈕
— 相當於 insert("checkbutton", **options)
insert_command(index, **options)
— 在 index 參數指定的位置添加一個普通的命令菜單項
— 相當於 insert("command", **options)
insert_radiobutton(index, **options)
— 在 index 參數指定的位置添加一個單選按鈕
— 相當於 insert("radiobutton", **options)
insert_separator(index, **options)
— 在 index 參數指定的位置添加一條分割線
— 相當於 insert("separator", **options)
invoke(index)
— 調用 index 指定的菜單項相關聯的方法
— 如果是單選按鈕,設置該菜單項為選中狀態
— 如果是多選按鈕,切換該菜單項的選中狀態
post(x, y)
— 在指定的位置顯示彈出菜單
— 參考上方【用法】中的創建彈窗菜單的例子
type(index)
— 獲得 index 參數指定菜單項的類型
— 返回值可以是:"command","cascade","checkbutton","radiobutton" 或 "separator"
unpost()
— 移除彈出菜單
yposition(index)
— 返回 index 參數指定的菜單項的垂直偏移位置
— 該方法的目的是為瞭讓你精確放置相對於當前鼠標的位置彈出菜單
到此這篇關於Python中Tkinter組件Menu的具體使用的文章就介紹到這瞭,更多相關Python Tkinter Menu內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python Tkinter Menu控件使用詳解
- Python GUI編程詳解
- python TKinter彈出式菜單的實例方法
- 基於Python+Tkinter實現一個簡易計算器
- Python GUI 圖形用戶界面