Python Tkinter Menu控件使用詳解
Menu 控件(菜單控件)可以說是 GUI 中“精髓所在”,它以可視化的方式將一系列的命令進行分組,在每一個分組下又可以“隱藏”許多的程序執(zhí)行命令(即功能)。當打開菜單時,這些命令就會“顯式”的呈現(xiàn)出來,方便用戶進行選擇,比如 Windows 系統(tǒng)中記事本文件(.txt文件類型)的界面:
圖1:Menu菜單界面
通過使用菜單控件(Menu)可以充分地節(jié)省有限的窗口區(qū)域,讓我們的界面更加簡潔優(yōu)雅,避免臃腫、混亂。
Tkinter Menu 控件提供了三種類型的菜單,分別是:topleve(主目錄菜單)、pull-down(下拉式菜單)、pop-up(彈出式菜單,或稱快捷式菜單)。
下表列出創(chuàng)建菜單時用到的相關(guān)方法,如下所示:
方法 | 說明 |
---|---|
add_cascade(**options) | 添加一個父菜單,將一個指定的子菜單,通過 menu 參數(shù)與父菜單連接,從而創(chuàng)建一個下拉菜單。 |
add_checkbutton(**options) | 添加一個多選按鈕的菜單項 |
add_command(**options) | 添加一個普通的命令菜單項 |
add_radiobutton(**options) | 添加一個單選按鈕的菜單項 |
add_separator(**options) | 添加一條分割線 |
add(add(itemType, options)) | 添加菜單項,此處 itemType 參數(shù)可以是以下幾種:"command"、"cascade", "checkbutton"、"radiobutton"、"separator" 五種,并使用 options 選項來設(shè)置 菜單其他屬性。 |
除了上述方法之外,Menu 控件也提供了一些其他方法來操作菜單項,比如刪除菜單項、獲取菜單項、設(shè)置指定的菜單項等,如下表所示:
方法 | 說明 |
---|---|
delete(index1, index2=None) | 1. 刪除 index1 ~ index2(包含)的所有菜單項 2. 如果忽略 index2 參數(shù),則刪除 index1 指向的菜單項 |
entrycget(index, option) | 獲得指定菜單項的某選項的值 |
entryconfig(index, **options) | 設(shè)置指定菜單項的選項 |
index(index) | 返回與 index 參數(shù)相應(yīng)的選項的序號 |
insert(index, itemType, **options) | 插入指定類型的菜單項到 index 參數(shù)指定的位置,類型可以是 是:"command","cascade","checkbutton","radiobutton" 或 "separator" 中的一個,或者也可以使用 insert_類型() 形式來, 比如 insert_cascade(index, **options)..等 |
invoke(index) | 調(diào)用 index 指定的菜單項相關(guān)聯(lián)的方法 |
post(x, y) | 在指定的位置顯示彈出菜單 |
type(index) | 獲得 index 參數(shù)指定菜單項的類型 |
unpost() | 移除彈出菜單 |
yposition(index) | 返回 index 參數(shù)指定的菜單項的垂直偏移位置 |
下面對 Menu 控件的 options 參數(shù)做簡單地介紹,如下所示:
屬性 | 說明 |
---|---|
accelerator | 1. 設(shè)置菜單項的快捷鍵,快捷鍵會顯示在菜單項目的右邊,比如 accelerator = "Ctrl+O" 表示打開; 2. 注意,此選項并不會自動將快捷鍵與菜單項連接在一起,必須通過按鍵綁定來實現(xiàn) |
command | 選擇菜單項時執(zhí)行的 callback 函數(shù) |
label | 定義菜單項內(nèi)的文字 |
menu | 此屬性與 add_cascade() 方法一起使用,用來新增菜單項的子菜單項 |
selectcolor | 指定當菜單項顯示為單選按鈕或多選按鈕時選擇中標志的顏色 |
state | 定義菜單項的狀態(tài),可以是 normal、active 或 disabled |
onvalue/offvalue | 1. 默認情況下,variable 選項設(shè)置為 1 表示選中狀態(tài),反之設(shè)置為 0,設(shè)置 offvalue/onvalue 的值可以自定義未選中狀態(tài)的值 2. |
tearoff | 1. 如果此選項為 True,在菜單項的上面就會顯示一個可選擇的分隔線; 2. 注意:分隔線會將此菜單項分離出來成為一個新的窗口 |
underline | 設(shè)置菜單項中哪一個字符要有下畫線 |
value | 1. 設(shè)置按鈕菜單項的值 2. 在同一組中的所有按鈕應(yīng)該擁有各不相同的值 3. 通過將該值與 variable 選項的值對比,即可判斷用戶選中了哪個按鈕 |
variable | 當菜單項是單選按鈕或多選按鈕時,與之關(guān)聯(lián)的變量 |
創(chuàng)建主目錄菜單
主目錄菜單也稱之為“頂級菜單”,下拉菜單等其他子菜單的都需要建立在“頂級菜單”的基礎(chǔ)之上,下面示例創(chuàng)建了一個類似于“記事本”界面的程序,代碼如下:
from tkinter import * import tkinter . messagebox #創(chuàng)建主窗口 win = Tk() win.config(bg='#87CEEB') win.title("C語言中文網(wǎng)") win.geometry('450x350+300+200') win.iconbitmap('C:/Users/Administrator/Desktop/C語言中文網(wǎng)logo.ico') # 綁定一個執(zhí)行函數(shù),當點擊菜單項的時候會顯示一個消息對話框 def menuCommand() : tkinter.messagebox.showinfo("主菜單欄","你正在使用主菜單欄") # 創(chuàng)建一個主目錄菜單,也被稱為頂級菜單 main_menu = Menu (win) #新增命令菜單項,使用 add_command() 實現(xiàn) main_menu.add_command (label="文件",command=menuCommand) main_menu.add_command (label="編輯",command=menuCommand) main_menu.add_command (label="格式",command=menuCommand) main_menu.add_command (label="查看",command=menuCommand) main_menu.add_command (label="幫助",command=menuCommand) #顯示菜單 win.config (menu=main_menu) win.mainloop()
程序運行結(jié)果如下:
圖2:Menu 控件創(chuàng)建主菜單
如上圖所示,當點擊主目錄中的任意一個菜單選項時都會跳出一個消息對話框。
創(chuàng)建下拉菜單
下拉菜單時主菜單的重要組成部分,也是用戶選擇相關(guān)命令的重要交互界面,下拉菜單的創(chuàng)建方式也非常簡單,不過需要我們注意,下拉菜單是建立的主菜單(即頂級菜單)的基礎(chǔ)之上的,并非主窗口之上,這一點千萬不要搞混,否則創(chuàng)建下拉菜單會失敗。
下面繼續(xù)仿照“記事本”的相關(guān)功能來創(chuàng)建下拉菜單,示例如下:
#創(chuàng)建一個下拉式菜單 from tkinter import * import tkinter .messagebox #創(chuàng)建主窗口 win = Tk() win.config(bg='#87CEEB') win.title("C語言中文網(wǎng)") win.geometry('450x350+300+200') win.iconbitmap('C:/Users/Administrator/Desktop/C語言中文網(wǎng)logo.ico') #創(chuàng)建一個執(zhí)行函數(shù),點擊下拉菜單中命令時執(zhí)行 def menuCommand() : tkinter .messagebox .showinfo("下拉菜單", "您正在使用下拉菜單功能") #創(chuàng)建主目錄菜單(頂級菜單) mainmenu = Menu (win) #在頂級菜單上新增"文件"菜單的子菜單,同時不添加分割線 filemenu = Menu (mainmenu, tearoff=False) #新增"文件"菜單的菜單項,并使用 accelerator 設(shè)置菜單項的快捷鍵 filemenu.add_command (label="新建",command=menuCommand,accelerator="Ctrl+N") filemenu.add_command (label="打開",command=menuCommand, accelerator="Ctrl+O") filemenu.add_command (label="保存",command=menuCommand, accelerator="Ctrl+S") # 添加一條分割線 filemenu.add_separator () filemenu.add_command (label="退出",command=win. quit) #在主目錄菜單上新增"文件"選項,并通過menu參數(shù)與下拉菜單綁定 mainmenu.add_cascade (label="文件",menu=filemenu) # 將主菜單設(shè)置在窗口上 win.config (menu=mainmenu) # 綁定鍵盤事件,按下鍵盤上的相應(yīng)的鍵時都會觸發(fā)執(zhí)行函數(shù) win.bind ("<Control-n>",menuCommand) win. bind ("<Control-N>", menuCommand) win.bind ("<Control-o>",menuCommand) win. bind ("<Control-O>", menuCommand) win. bind ("<Control-s>", menuCommand) win.bind ("<Control-S>",menuCommand) # 顯示主窗口 win.mainloop()
程序運行解結(jié)果如下:
圖3:Menu 控件下拉菜單
創(chuàng)建彈出菜單欄
彈出式菜單欄,也稱為快捷式菜單欄,比如通過點擊鼠標右鍵彈出一個菜單欄,其中包含一些常用的選項卡,如復(fù)制、粘貼等,如下所示:在記事本的空白處點擊鼠標右鍵會彈出一個菜單欄。
圖4:彈出式菜單欄
Tkinter Menu 控件同樣可以是實現(xiàn)上述功能,而且并不復(fù)雜,示例如下:
import tkinter as tk root = tk.Tk() root.config(bg='#8DB6CD') root.title("C語言中文網(wǎng)") root.geometry('400x300') root.iconbitmap('C:/Users/Administrator/Desktop/C語言中文網(wǎng)logo.ico') def func(): print('您通過彈出菜單執(zhí)行了命令') # 創(chuàng)建一個彈出菜單 menu = tk.Menu(root, tearoff=False) menu.add_command(label="新建", command=func) menu.add_command(label="復(fù)制", command=func) menu.add_command(label="粘貼", command=func) menu.add_command(label="剪切", command=func) # 定義事件函數(shù) def command(event): # 使用 post()在指定的位置顯示彈出菜單 menu.post(event.x_root, event.y_root) # 綁定鼠標右鍵,這是鼠標綁定事件 # <Button-3>表示點擊鼠標的右鍵,1 表示左鍵,2表示點擊中間的滑輪 root.bind("<Button-3>", command) root.mainloop()
程序運行結(jié)果如下:
圖5:Menu控件彈出菜單
菜單按鈕控件
Menubutton(菜單按鈕控件)是一個與 Menu 控件相關(guān)聯(lián)的按鈕,當我們按下按鈕的時候下拉菜單就會自動彈出。通過 Menubutton 創(chuàng)建的菜單按鈕可以自由地放置在窗口中的任意位置,從而提高了 GUI 界面的靈活性。
下面看一組簡單使用示例:
from tkinter import * win=Tk() win.config(bg='#87CEEB') win.title("C語言中文網(wǎng)") win.geometry('450x350+300+200') win.iconbitmap('C:/Users/Administrator/Desktop/C語言中文網(wǎng)logo.ico') #創(chuàng)建一個菜單按鈕 menubtn=Menubutton(win, text='點擊進行操作', relief='sunk') # 設(shè)置位置(布局) menubtn.grid(padx=195, pady=105) #添加菜單,使用 tearoff 參數(shù)不顯示分割線 filemenu=Menu(menubtn,tearoff = False) filemenu.add_command(label='新建') filemenu.add_command(label='刪除') filemenu.add_command(label='復(fù)制') filemenu.add_command(label='保存') # 顯示菜單,將菜單命令綁定在菜單按鈕對象上 menubtn.config(menu=filemenu) win.mainloop()
程序運行結(jié)果如下:
圖6:Menubutton菜單按鈕
以上就是Python Tkinter Menu控件使用詳解的詳細內(nèi)容,更多關(guān)于Python Tkinter Menu的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python 數(shù)據(jù)結(jié)構(gòu)之樹的概念詳解
這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)之樹的概念詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-09-09關(guān)于torch.optim的靈活使用詳解(包括重寫SGD,加上L1正則)
今天小編就為大家分享一篇關(guān)于torch.optim的靈活使用詳解(包括重寫SGD,加上L1正則),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02Python使用pyecharts繪制世界地圖,省級地圖,城市地圖實例詳解
這篇文章主要介紹了如何使用Python中的pyecharts庫繪制世界地圖、中國地圖、省級地圖、市級地圖,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起動手試一試2022-02-02利用Python實現(xiàn)斐波那契數(shù)列的方法實例
這篇文章主要給大家介紹了關(guān)于如何利用Python實現(xiàn)斐波那契數(shù)列的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07