天天看點

Tkinter Menu——自動化程式的可視化開發菜單詳解

作者:RPA自動化

帶你走進 @ 機器人時代

Discover 點選上面藍色文字,關注我們

Tkinter Menu——自動化程式的可視化開發菜單詳解

Tkinter Menu 可以說是 GUI 中“精髓所在”,它以可視化的方式将一系列的“功能頁籤”進行分組。

Tkinter Menu 控件提供了三種類型的菜單,分别是:topleve(主目錄菜單)、pull-down(下拉式菜單)、pop-up(彈出式菜單,或稱快捷式菜單)。

先來看代碼:

from tkinter import *
import tkinter.messagebox
import tkinter as tk

w = tk.Tk()
w.title("工作機器人時代-微信公衆平台")
w.geometry('500x190+710+410')
w.iconbitmap('1.ico')
w.resizable(False, False)

def md():
    tkinter.messagebox.showinfo("主菜單欄", "你正在使用主菜單欄")
# 建立一個頂級菜單
m = Menu(w)
# 使用 add_command()指令建立菜單
m.add_command(label="建立", command=md)
m.add_command(label="編輯", command=md)
m.add_command(label="進階", command=md)
m.add_command(label="配置", command=md)
m.add_command(label="幫助", command=md)
# 顯示菜單
w.config(menu=m)
w.mainloop()           

運作後得到:

Tkinter Menu——自動化程式的可視化開發菜單詳解

如果我們要建立下拉菜單,可以輸入以下代碼:

from tkinter import *
import tkinter as tk

w = tk.Tk()
w.title("工作機器人時代-微信公衆平台")
w.geometry('500x190+710+410')
w.iconbitmap('1.ico')
w.resizable(False, False)
# 建立一個頂級菜單
m = Menu(w)
#新增子菜單
u = Menu (m, tearoff=False)
# 使用 add_command()指令建立菜單
m.add_cascade (label="檔案",menu=u)
m.add_cascade (label="編輯")
m.add_cascade (label="進階")
m.add_cascade (label="配置")
m.add_cascade (label="幫助")

#新增"檔案"菜單的菜單項
u.add_command (label="建立檔案",accelerator="W")
u.add_command (label="建立檔案夾", accelerator="O")
u.add_command (label="儲存檔案",accelerator="S")
# 添加一條分割線
u.add_separator ()
u.add_command (label="退出系統",accelerator="Q",command=w. quit)
# 顯示菜單
w.config(menu=m)
w.mainloop()           

運作後得到:

Tkinter Menu——自動化程式的可視化開發菜單詳解

點選檔案,彈出下拉菜單,點選退出系統,程式關閉。下面我們增加代碼,讓滑鼠點選建立檔案或按快捷鍵Ctrl+w鍵的時候彈出對話框:

from tkinter import *
import tkinter.messagebox
import tkinter as tk

w = tk.Tk()
w.title("工作機器人時代-微信公衆平台")
w.geometry('500x190+710+410')
w.iconbitmap('1.ico')
w.resizable(False, False)

def md():
    tkinter.messagebox.showinfo("新消息", "你正點選建立檔案")
def md1(x):
    #print(x)
    tkinter.messagebox.showinfo("新消息", "你正按快捷鍵建立檔案指令")

# 建立一個頂級菜單
m = Menu(w)
#新增子菜單
u = Menu (m, tearoff=False)
# 使用 add_command()指令建立菜單
m.add_cascade (label="檔案",menu=u)
m.add_cascade (label="編輯")
m.add_cascade (label="進階")
m.add_cascade (label="配置")
m.add_cascade (label="幫助")

#新增"檔案"菜單的菜單項
u.add_command (label="建立檔案",command=md,accelerator="W")
u.add_command (label="建立檔案夾", accelerator="O")
u.add_command (label="儲存檔案",accelerator="S")
# 添加一條分割線
u.add_separator ()
u.add_command (label="退出系統",accelerator="Q",command=w. quit)
#捕獲鍵盤事件
w.bind ('<Control-w>',md1)
w.bind ('<Control-W>',md1)
# 顯示菜單
w.config(menu=m)
w.mainloop()           

這裡要注意,當鍵盤按鍵的時候會傳回函數一個參數,是以定義函數的時候要寫成def md1(x):而不能寫成def md1(),運作後效果如下:

Tkinter Menu——自動化程式的可視化開發菜單詳解

如果我們想在窗體界面右鍵點選後彈出一個菜單,在w.config(menu=m)前面插入以下代碼:

def fc():
    tkinter.messagebox.showinfo("新消息", "您通過彈出菜單執行了指令")
mu = tk.Menu(w, tearoff=False)#定義彈出的菜單
mu.add_command(label="複制", command=fc)
mu.add_command(label="粘貼", command=fc)
mu.add_command(label="剪切", command=fc)
def cod(event):
    # 使用 post()在指定的位置顯示彈出菜單
    mu.post(event.x_root, event.y_root)
w.bind("<Button-3>", cod)#滑鼠點選右鍵           

用fc函數定義彈出菜單中的按鈕事件,用cod函數來定義右鍵點選後顯示彈出菜單:

Tkinter Menu——自動化程式的可視化開發菜單詳解

如果希望在窗體的任意位置布局一個按鈕,當滑鼠點選時彈出操作菜單,參考以下代碼:

from tkinter import *
import tkinter as tk
w = tk.Tk()
w.title("工作機器人時代-微信公衆平台")
w.geometry('500x190+710+410')
w.iconbitmap('1.ico')
w.resizable(False, False)
#建立一個菜單按鈕
mb=Menubutton(w, text='點選進行操作', relief='solid')
# 設定位置(布局)
mb.grid(padx=35, pady=35)
#添加菜單,使用 tearoff 參數不顯示分割線
fm=Menu(mb,tearoff = False)
fm.add_command(label='建立')
fm.add_command(label='删除')
fm.add_command(label='複制')
fm.add_command(label='儲存')
# 顯示菜單,将菜單指令綁定在菜單按鈕對象上
mb.config(menu=fm)
w.mainloop()           

運作後得到如下效果:

Tkinter Menu——自動化程式的可視化開發菜單詳解

我們來看看Menu菜單控件都有哪些屬性:

activebackground 設定活動背景色
activeborderwidth 設定活動邊框寬度
activeforeground 設定活動前景色
bg 設定背景色
bd 設定邊框寬度
cursor 光标的顯示樣式
disabledforeground 菜單項的狀态為DISABLED時的文字顔色
font 設定字型
fg 設定前景色,也就是文字的顔色
postcommand 點選該菜單時,調用回調函數。
relief 設定3D效果
selectcolor 如果選中顯示selectcolor設定的顔色
tearoff 将每個菜單分離出去,單獨形成一個子視窗
title 設定tear-off子視窗的标題

除了這些屬性,還有方法:

add_cascade(**options) 添加一個父菜單,将一個指定的子菜單,通過參數與父菜單連接配接,進而建立一個下拉菜單
add_checkbutton(**options) 添加一個多選按鈕的菜單項
add_command(**options) 添加一個普通的指令菜單項
add_radiobutton(**options) 添加一個單選按鈕的菜單項
add_separator(**options) 添加一條分割線
add(add(itemType, options))

添加菜單項

此處 itemType 參數:

"command"

"cascade"

"checkbutton"

"radiobutton"

"separator"

可以使用 options 選項來設定菜單其他屬性

delete(index1, index2=None)

1. 删除 index1 ~ index2(包含)的所有菜單項

2. 如果忽略 index2 參數,則删除 index1 指向的菜單項

entrycget(index, option) 獲得指定菜單項的某選項的值
entryconfig(index, **options) 設定指定菜單項的選項
insert(index, itemType, **options)

插入指定類型的菜單項到 index 參數指定的位置,類型可以是:

"command"

"cascade"

"checkbutton"

"radiobutton" 或 "separator" 中的一個,或者也可以使用 insert_類型() 形式來, 比如 insert_cascade(index, **options)

invoke(index) 調用 index 指定的菜單項相關聯的方法
post(x, y) 在指定的位置顯示彈出菜單
type(index) 獲得 index 參數指定菜單項的類型
unpost() 移除彈出菜單
yposition(index) 傳回 index 參數指定的菜單項的垂直偏移位置
index(index) 傳回與 index 參數相應的選項的序号

Menu 控件的 options 參數:

accelerator

1. 設定菜單項的快捷鍵,會顯示在菜單項目的右邊

2. 注意,必須通過按鍵綁定來實作

command 選擇菜單項時執行的 callback 函數
label 定義菜單項内的文字
menu 此屬性與 add_cascade() 方法一起使用,用來新增菜單項的子菜單項
selectcolor 指定當菜單項顯示為單選按鈕或多選按鈕時選擇中标志的顔色
state

定義菜單項的狀态

可以是 normal、active 或 disabled

onvalue/offvalue 預設情況下,variable 選項設定為 1 表示選中狀态
tearoff 設為 True,在菜單項的上面就會顯示一個可選擇的分隔線
underline 設定菜單項中字元的下畫線
value 設定按鈕菜單項的值,通過該值與 variable 選項的值對比,即可判斷使用者選中了哪個按鈕
variable 當菜單項是單選按鈕或多選按鈕時與之關聯的變量

堅持學習,每天都能進步一點!

繼續閱讀