分享免费的编程资源和教程

网站首页 > 技术教程 正文

Tkinter Menu——自动化程序的可视化开发菜单详解

goqiw 2025-07-06 12:03:26 技术教程 6 ℃ 0 评论

带你走进 @ 机器人时代

Discover 点击上面蓝色文字关注我们


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()

运行后得到:

如果我们要创建下拉菜单,可以输入以下代码:

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()

运行后得到:

点击文件,弹出下拉菜单,点击退出系统,程序关闭。下面我们增加代码,让鼠标点击新建文件或按快捷键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(),运行后效果如下:

如果我们想在窗体界面右键点击后弹出一个菜单,在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函数来定义右键点击后显示弹出菜单:

如果希望在窗体的任意位置布局一个按钮,当鼠标点击时弹出操作菜单,参考以下代码:

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()

运行后得到如下效果:

我们来看看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

当菜单项是单选按钮或多选按钮时与之关联的变量


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

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表