Python中Tkinter組件Menu的具體使用
Menu(菜單)組件用于實(shí)現(xiàn)頂級菜單、下拉菜單和彈出菜單。
何時(shí)使用 Menu 組件?
Menu 組件通常被用于實(shí)現(xiàn)應(yīng)用程序上的各種菜單,由于該組件是底層代碼實(shí)現(xiàn),所以不建議你自行通過按鈕和其他組件來實(shí)現(xiàn)菜單功能。
用法
創(chuàng)建一個(gè)頂級菜單,你需要先創(chuàng)建一個(gè)菜單實(shí)例,然后使用 add() 方法將命令和其它子菜單添加進(jìn)去:
import tkinter as tk root = tk.Tk() def callback(): print("~被調(diào)用啦~") #創(chuàng)建一個(gè)頂級菜單 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()
創(chuàng)建一個(gè)下拉菜單(或者其他子菜單),方法也是大同小異,最主要的區(qū)別是它們最后需要添加到主菜單上(而不是窗口上):
import tkinter as tk root = tk.Tk() def callback(): print("~被調(diào)用了~") # 創(chuàng)建一個(gè)頂級菜單 menubar = tk.Menu(root) # 創(chuàng)建一個(gè)下拉菜單“文件”,然后將它添加到頂級菜單中 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) # 創(chuàng)建另一個(gè)下拉菜單“編輯”,然后將它添加到頂級菜單中 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()
創(chuàng)建一個(gè)彈出菜單方法也是一致的,不過需要使用 post() 方法明確的將其顯示出來:
import tkinter as tk root = tk.Tk() def callback(): print("~被調(diào)用了~") # 創(chuàng)建一個(gè)彈出菜單 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) # 綁定鼠標(biāo)右鍵 frame.bind("<Button-3>", popup) root.mainloop()
參數(shù)
Menu(master=None, **options) (class)
master -- 父組件
**options -- 組件選項(xiàng),下方表格詳細(xì)列舉了各個(gè)選項(xiàng)的具體含義和用法:
選項(xiàng) | 含義 |
activebackground | 設(shè)置當(dāng) Menu 處于 "active" 狀態(tài)(通過 state 選項(xiàng)設(shè)置狀態(tài))的背景色 |
activeborderwidth | 設(shè)置當(dāng) Menu 處于 "active" 狀態(tài)(通過 state 選項(xiàng)設(shè)置狀態(tài))的邊框?qū)挾?/td> |
activeforeground | 設(shè)置當(dāng) Menu 處于 "active" 狀態(tài)(通過 state 選項(xiàng)設(shè)置狀態(tài))的前景色 |
background | 設(shè)置背景顏色 |
bg | 跟 background 一樣 |
borderwidth | 指定邊框?qū)挾?/td> |
bd | 跟 borderwidth 一樣 |
cursor | 指定當(dāng)鼠標(biāo)在 Menu 上飄過的時(shí)候的鼠標(biāo)樣式 |
disabledforeground | 指定當(dāng) Menu 處于 "disabled" 狀態(tài)的時(shí)候的前景色 |
font | 指定 Menu 中文本的字體 |
foreground | 設(shè)置 Menu 的前景色 |
fg | 跟 foreground 一樣 |
postcommand | 將此選項(xiàng)與一個(gè)方法相關(guān)聯(lián),當(dāng)菜單被打開的時(shí)候該方法將自動被調(diào)用 |
relief | 1. 指定邊框樣式 2. 默認(rèn)值是 "flat" 3. 另外你還可以設(shè)置 "sunken","raised","groove" 或 "ridge" |
selectcolor | 指定當(dāng)菜單項(xiàng)顯示為單選按鈕或多選按鈕時(shí)選擇中標(biāo)志的顏色 |
tearoff | 1. 默認(rèn)情況下菜單可以被“撕下”(點(diǎn)擊 IDLE 菜單上邊的 --------- 試試) 2. 將該選項(xiàng)設(shè)置為 Flase 關(guān)閉這一特性 |
tearoffcommand | 如果你希望當(dāng)用戶“撕下”你的菜單時(shí)通知你的程序,那么你可以將該選項(xiàng)與一個(gè)方法相關(guān)聯(lián),那么當(dāng)用戶“撕下”你的菜單時(shí),Tkinter 會帶著兩個(gè)參數(shù)去調(diào)用你的方法(一個(gè)參數(shù)是當(dāng)前窗口的 ID,另一個(gè)參數(shù)是承載被“撕下”的菜單的窗口 ID) |
title | 默認(rèn)情況下,被“撕下”的菜單標(biāo)題是其主菜單的名字,不過你也可以通過修改此項(xiàng)的值來修改標(biāo)題 |
方法
add(type, **options)
-- type 參數(shù)指定添加的菜單類型,可以是:"command","cascade","checkbutton","radiobutton" 或 "separator"
-- 還可以通過 options 選項(xiàng)設(shè)置菜單的屬性,下表列舉了 options 可以使用的選項(xiàng)和具體含義:
選項(xiàng) | 含義 |
accelerator | 1. 顯示該菜單項(xiàng)的加速鍵(快捷鍵) 2. 例如 accelerator = "Ctrl+N" 3. 該選項(xiàng)僅顯示,并沒有實(shí)現(xiàn)加速鍵的功能(通過按鍵綁定實(shí)現(xiàn)) |
activebackground | 設(shè)置當(dāng)該菜單項(xiàng)處于 "active" 狀態(tài)(通過 state 選項(xiàng)設(shè)置狀態(tài))的背景色 |
activeforeground | 設(shè)置當(dāng)該菜單項(xiàng)處于 "active" 狀態(tài)(通過 state 選項(xiàng)設(shè)置狀態(tài))的前景色 |
background | 設(shè)置該菜單項(xiàng)的背景顏色 |
bitmap | 指定顯示到該菜單項(xiàng)上的位圖 |
columnbreak | 從該菜單項(xiàng)開始另起一列顯示 |
command | 將該選項(xiàng)與一個(gè)方法相關(guān)聯(lián),當(dāng)用戶點(diǎn)擊該菜單項(xiàng)時(shí)將自動調(diào)用此方法 |
compound | 1. 控制菜單項(xiàng)中文本和圖像的混合模式 2. 如果該選項(xiàng)設(shè)置為 "center",文本顯示在圖像上(文本重疊圖像) 3. 如果該選項(xiàng)設(shè)置為 "bottom","left","right" 或 "top",那么圖像顯示在文本的旁邊(如 "bottom",則圖像在文本的下方 |
font | 指定文本的字體 |
foreground | 設(shè)置前景色 |
hidemargin | 是否顯示菜單項(xiàng)旁邊的空白 |
image | 1. 指定菜單項(xiàng)顯示的圖片 2. 該值應(yīng)該是 PhotoImage,BitmapImage,或者能兼容的對象 |
label | 指定菜單項(xiàng)顯示的文本 |
menu | 1. 該選項(xiàng)僅在 cascade 類型的菜單中使用 2. 用于指定它的下級菜單 |
offvalue | 1. 默認(rèn)情況下,variable 選項(xiàng)設(shè)置為 1 表示選中狀態(tài),反之設(shè)置為 0 2. 設(shè)置 offvalue 的值可以自定義未選中狀態(tài)的值 |
onvalue | 1. 默認(rèn)情況下,variable 選項(xiàng)設(shè)置為 1 表示選中狀態(tài),反之設(shè)置為 0 2. 設(shè)置 onvalue 的值可以自定義選中狀態(tài)的值 |
selectcolor | 指定當(dāng)菜單項(xiàng)顯示為單選按鈕或多選按鈕時(shí)選擇中標(biāo)志的顏色 |
selectimage | 如果你在單選按鈕或多選按鈕菜單中使用圖片代替文本,那么設(shè)置該選項(xiàng)指定被菜單項(xiàng)被選中時(shí)顯示的圖片 |
state | 1. 跟 text 選項(xiàng)一起使用,用于指定哪一個(gè)字符畫下劃線(例如用于表示鍵盤快捷鍵) |
underline | 1. 用于指定在該菜單項(xiàng)的某一個(gè)字符處畫下劃線 2. 例如設(shè)置為 1,則說明在該菜單項(xiàng)的第 2 個(gè)字符處畫下劃線 |
value | 1. 當(dāng)菜單項(xiàng)為單選按鈕時(shí),用于標(biāo)志該按鈕的值 2. 在同一組中的所有按鈕應(yīng)該擁有各不相同的值 3. 通過將該值與 variable 選項(xiàng)的值對比,即可判斷用戶選中了哪個(gè)按鈕 4. 如在使用上有不懂具體可以參照 Radiobutton 組件的說明 |
variable | 1. 當(dāng)菜單項(xiàng)是單選按鈕或多選按鈕時(shí),與之關(guān)聯(lián)的變量 2. 如在使用上有不懂具體可以參照:Checkbutton 和 Radiobutton 組件的說明 |
add_cascade(**options)
-- 添加一個(gè)父菜單
-- 相當(dāng)于 add("cascade", **options)
add_checkbutton(**options)
-- 添加一個(gè)多選按鈕的菜單項(xiàng)
-- 相當(dāng)于 add("checkbutton", **options)
add_command(**options)
-- 添加一個(gè)普通的命令菜單項(xiàng)
-- 相當(dāng)于 add("command", **options)
add_radiobutton(**options)
-- 添加一個(gè)單選按鈕的菜單項(xiàng)
-- 相當(dāng)于 add("radiobutton", **options)
add_separator(**options)
-- 添加一條分割線
-- 相當(dāng)于 add("separator", **options)
delete(index1, index2=None)
-- 刪除 index1 ~ index2(包含)的所有菜單項(xiàng)
-- 如果忽略 index2 參數(shù),則刪除 index1 指向的菜單項(xiàng)
-- 注意:對于一個(gè)被“撕下”的菜單,你無法使用該方法
entrycget(index, option)
-- 獲得指定菜單項(xiàng)的某選項(xiàng)的值
entryconfig(index, **options)
-- 設(shè)置指定菜單項(xiàng)的選項(xiàng)
-- 選項(xiàng)的參數(shù)及具體含義請參考上方 add() 方法
entryconfigure(index, **options)
-- 跟 entryconfig() 一樣
index(index)
-- 返回與 index 參數(shù)相應(yīng)的選項(xiàng)的序號(例如 e.index("end"))
insert(index, itemType, **options)
-- 插入指定類型的菜單項(xiàng)到 index 參數(shù)指定的位置
-- itemType 參數(shù)指定添加的菜單類型,可以是:"command","cascade","checkbutton","radiobutton" 或 "separator"
-- 選項(xiàng)的參數(shù)及具體含義請參考上方 add() 方法
insert_cascade(index, **options)
-- 在 index 參數(shù)指定的位置添加一個(gè)父菜單
-- 相當(dāng)于 insert("cascade", **options)
insert_checkbutton(index, **options)
-- 在 index 參數(shù)指定的位置添加一個(gè)多選按鈕
-- 相當(dāng)于 insert("checkbutton", **options)
insert_command(index, **options)
-- 在 index 參數(shù)指定的位置添加一個(gè)普通的命令菜單項(xiàng)
-- 相當(dāng)于 insert("command", **options)
insert_radiobutton(index, **options)
-- 在 index 參數(shù)指定的位置添加一個(gè)單選按鈕
-- 相當(dāng)于 insert("radiobutton", **options)
insert_separator(index, **options)
-- 在 index 參數(shù)指定的位置添加一條分割線
-- 相當(dāng)于 insert("separator", **options)
invoke(index)
-- 調(diào)用 index 指定的菜單項(xiàng)相關(guān)聯(lián)的方法
-- 如果是單選按鈕,設(shè)置該菜單項(xiàng)為選中狀態(tài)
-- 如果是多選按鈕,切換該菜單項(xiàng)的選中狀態(tài)
post(x, y)
-- 在指定的位置顯示彈出菜單
-- 參考上方【用法】中的創(chuàng)建彈窗菜單的例子
type(index)
-- 獲得 index 參數(shù)指定菜單項(xiàng)的類型
-- 返回值可以是:"command","cascade","checkbutton","radiobutton" 或 "separator"
unpost()
-- 移除彈出菜單
yposition(index)
-- 返回 index 參數(shù)指定的菜單項(xiàng)的垂直偏移位置
-- 該方法的目的是為了讓你精確放置相對于當(dāng)前鼠標(biāo)的位置彈出菜單
到此這篇關(guān)于Python中Tkinter組件Menu的具體使用的文章就介紹到這了,更多相關(guān)Python Tkinter Menu內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談Python由__dict__和dir()引發(fā)的一些思考
這篇文章主要介紹了淺談Python由__dict__和dir()引發(fā)的一些思考,具有一定參考價(jià)值,需要的朋友可以了解下。2017-10-10Python中參數(shù)打包和解包的實(shí)現(xiàn)
在Python中,打包和解包參數(shù)是一種操作方式,可以將多個(gè)參數(shù)打包成一個(gè)元組或字典,也可以將一個(gè)元組或字典解包成多個(gè)參數(shù),本文就來介紹一下如何使用2023-09-09Python while循環(huán)使用else語句代碼實(shí)例
這篇文章主要介紹了Python while循環(huán)使用else語句代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02Python使用multiprocessing實(shí)現(xiàn)一個(gè)最簡單的分布式作業(yè)調(diào)度系統(tǒng)
mutilprocess像線程一樣管理進(jìn)程,這個(gè)是mutilprocess的核心,他與threading很是相像,對多核CPU的利用率會比threading好的多,通過本文給大家介紹Python使用multiprocessing實(shí)現(xiàn)一個(gè)最簡單的分布式作業(yè)調(diào)度系統(tǒng),需要的朋友參考下2016-03-03matplotlib之pyplot模塊坐標(biāo)軸標(biāo)簽設(shè)置使用(xlabel()、ylabel())
這篇文章主要介紹了matplotlib之pyplot模塊坐標(biāo)軸標(biāo)簽設(shè)置使用(xlabel()、ylabel()),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02解決Django的request.POST獲取不到內(nèi)容的問題
今天小編就為大家分享一篇解決Django的request.POST獲取不到內(nèi)容的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05Python文件簡單操作及openpyxl操作excel文件詳解
這篇文章主要為大家詳細(xì)介紹了python對文件的簡單使用及openpyxl操作excel文件的方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-10-10Python3實(shí)現(xiàn)抓取javascript動態(tài)生成的html網(wǎng)頁功能示例
這篇文章主要介紹了Python3實(shí)現(xiàn)抓取javascript動態(tài)生成的html網(wǎng)頁功能,結(jié)合實(shí)例形式分析了Python3使用selenium庫針對javascript動態(tài)生成的HTML網(wǎng)頁元素進(jìn)行抓取的相關(guān)操作技巧,需要的朋友可以參考下2017-08-08