【Python】【进阶篇】十一、Tkinter的Menu菜单控件

路欣荣
2023-12-01

十一、Tkinter的Menu菜单控件

Menu 控件(菜单控件)可以说是 GUI 中“精髓所在”,它以可视化的方式将一系列的“功能选项卡”进行分组,并在每个分组下又“隐藏”了许多其他的“选项卡”。当打开菜单时,这些选项卡就会“显式”的呈现出来,方便用户进行选择,

Menu 控件提供了三种类型的菜单,分别是:topleve(主目录菜单)、pull-down(下拉式菜单)、pop-up(弹出式菜单,或称快捷式菜单)。

下面列出了 Menu 中常用的属性:

名称说明
add_cascade(**options)添加一个父菜单,将一个指定的子菜单,通过 menu 参数与父菜单连接,从而创建一个下拉菜单。
add_checkbutton(**options)添加一个多选按钮的菜单项
add_command(**options)添加一个普通的命令菜单项
add_radiobutton(**options)添加一个单选按钮的菜单项
add_separator(**options)添加一条分割线
add(add(itemType, options))添加菜单项,此处 itemType 参数可以是以下几种:“command”、“cascade”, “checkbutton”、“radiobutton”、“separator” 五种,并使用 options 选项来设置 菜单其他属性。

下面列出了 Menu 中常用的方法:

名称说明
delete(index1, index2=None)1. 删除 index1 ~ index2(包含)的所有菜单项 2. 如果忽略 index2 参数,则删除 index1 指向的菜单项
entrycget(index, option)获得指定菜单项的某选项的值
entryconfig(index, **options)设置指定菜单项的选项
index(index)返回与 index 参数相应的选项的序号
insert(index, itemType, **options)插入指定类型的菜单项到 index 参数指定的位置,类型可以是 是:“command”,“cascade”,“checkbutton”,“radiobutton” 或 “separator” 中的一个,或者也可以使用 insert_类型() 形式来, 比如 insert_cascade(index, **options)…等
invoke(index)调用 index 指定的菜单项相关联的方法
post(x, y)在指定的位置显示弹出菜单
type(index)获得 index 参数指定菜单项的类型

下面对 Menu 控件的 options 参数做简单介绍,

名称说明
accelerator1. 设置菜单项的快捷键,快捷键会显示在菜单项目的右边,比如 accelerator = “Ctrl+O” 表示打开; 2. 注意,此选项并不会自动将快捷键与菜单项连接在一起,必须通过按键绑定来实现
command选择菜单项时执行的 callback 函数
label定义菜单项内的文字
menu此属性与 add_cascade() 方法一起使用,用来新增菜单项的子菜单项
selectcolor指定当菜单项显示为单选按钮或多选按钮时选择中标志的颜色
state定义菜单项的状态,可以是 normal、active 或 disabled
onvalue/offvalue1. 默认情况下,variable 选项设置为 1 表示选中状态,反之设置为 0,设置 offvalue/onvalue 的值可以自定义未选中状态的值 2.
tearoff1. 如果此选项为 True,在菜单项的上面就会显示一个可选择的分隔线; 2. 注意:分隔线会将此菜单项分离出来成为一个新的窗口
underline设置菜单项中哪一个字符要有下画线
value1. 设置按钮菜单项的值 2. 在同一组中的所有按钮应该拥有各不相同的值 3. 通过将该值与 variable 选项的值对比,即可判断用户选中了哪个按钮
variable当菜单项是单选按钮或多选按钮时,与之关联的变量

下面演示创建主目录菜单,代码如下

from tkinter import Tk, messagebox, Menu

win = Tk()
win.title("Python自学网")
win.config(bg="green")
win.geometry('380x270')
# 窗口不允许改变
win.resizable(0, 0)
win.iconbitmap('./python.png')


# 绑定一个执行函数,当点击菜单项的时候会显示一个消息对话框
def menuCommand():
    messagebox.showinfo("主菜单栏", "你正在使用主菜单栏")


# 创建一个主目录菜单,也被称为顶级菜单
main_menu = Menu(win)
# 新增命令菜单项,使用 add_command() 实现
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()

下面演示创建下拉菜单,代码如下

from tkinter import Tk, messagebox, Menu

win = Tk()
win.title("Python自学网")
win.config(bg="green")
win.geometry('380x270')
# 窗口不允许改变
win.resizable(0, 0)
win.iconbitmap('./python.png')


# 创建一个执行函数,点击下拉菜单中命令时执行
def menuCommand():
    tkinter.messagebox.showinfo("下拉菜单", "您正在使用下拉菜单功能")


# 创建主目录菜单(顶级菜单)
mainmenu = Menu(win)
# 在顶级菜单上新增"文件"菜单的子菜单,同时不添加分割线
filemenu = Menu(mainmenu, tearoff=False)
# 新增"文件"菜单的菜单项,并使用 accelerator 设置菜单项的快捷键
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参数与下拉菜单绑定
mainmenu.add_cascade(label="文件", menu=filemenu)
# 将主菜单设置在窗口上
win.config(menu=mainmenu)
# 绑定键盘事件,按下键盘上的相应的键时都会触发执行函数
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()

下面演示创建弹出菜单栏,代码如下

from tkinter import Tk, messagebox, Menu

win = Tk()
win.title("Python自学网")
win.config(bg="green")
win.geometry('380x270')
# 窗口不允许改变
win.resizable(0, 0)
win.iconbitmap('./python.png')


def func():
    print('您通过弹出菜单执行了命令')


# 创建一个弹出菜单
menu = Menu(win, tearoff=False)
menu.add_command(label="新建", command=func)
menu.add_command(label="复制", command=func)
menu.add_command(label="粘贴", command=func)
menu.add_command(label="剪切", command=func)


# 定义事件函数
def command(event):
    # 使用 post()在指定的位置显示弹出菜单
    menu.post(event.x_root, event.y_root)


# 绑定鼠标右键,这是鼠标绑定事件
# <Button-3>表示点击鼠标的右键,1 表示左键,2表示点击中间的滑轮
win.bind("<Button-3>", command)
win.mainloop()

 类似资料: