天天看点

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 当菜单项是单选按钮或多选按钮时与之关联的变量

坚持学习,每天都能进步一点!

继续阅读