Python 3 – Tkinter菜单
Tkinter是Python标准库中内置的图形用户界面(GUI)库,可以快速构建简单的GUI界面。Tkinter提供了菜单(Menus)的构建和管理功能。本文将介绍Tkinter菜单的基本使用方法。
菜单的类型
Tkinter提供了三种菜单类型:
– 普通菜单:包含一系列的命令项。
– 级联菜单:是普通菜单的一种扩展,其中每一项是另一个子菜单。
– 弹出菜单:在鼠标右键点击时显示的短暂菜单。
创建一个简单的菜单
以下是一个基本的菜单代码:
from tkinter import *
root = Tk()
menu = Menu(root)
root.config(menu=menu)
# 创建一个File菜单项
file_menu = Menu(menu)
menu.add_cascade(label='File', menu=file_menu)
file_menu.add_command(label='New')
file_menu.add_command(label='Open...')
file_menu.add_separator()
file_menu.add_command(label='Exit', command=root.quit)
# 创建一个Help菜单项
help_menu = Menu(menu)
menu.add_cascade(label='Help', menu=help_menu)
help_menu.add_command(label='About')
root.mainloop()
这个菜单窗口包含了两个级联菜单,分别是File
和Help
。File
下面包含了三个命令项以及一个分隔符和一个退出按钮。Help
下面仅有一个About
命令项。
接下来我们将逐一解释这个简单的菜单实现代码。
首先,我们需要导入Tkinter库,并创建一个Tk()
对象:
from tkinter import *
root = Tk()
接着,创建一个菜单对象Menu
,并将其配置到窗口上:
menu = Menu(root)
root.config(menu=menu)
创建一个普通菜单项File
,再添加三个命令项和一个分隔符。需要注意的是,命令项的函数需要定义在代码前面。
# 创建一个File菜单项
file_menu = Menu(menu)
menu.add_cascade(label='File', menu=file_menu)
file_menu.add_command(label='New')
file_menu.add_command(label='Open...')
file_menu.add_separator()
file_menu.add_command(label='Exit', command=root.quit)
创建一个级联菜单项Help
,并添加唯一的About
命令项。
# 创建一个Help菜单项
help_menu = Menu(menu)
menu.add_cascade(label='Help', menu=help_menu)
help_menu.add_command(label='About')
通过以上几步,就可以快速创建一个简单的菜单。
创建一个弹出菜单
以下是一个简单的弹出菜单代码:
from tkinter import *
root = Tk()
def popup(event):
popup_menu.post(event.x_root, event.y_root)
menu = Menu(root, tearoff=False)
menu.add_command(label='Undo')
menu.add_command(label='Redo')
menu.add_separator()
menu.add_command(label='Cut')
menu.add_command(label='Copy')
menu.add_command(label='Paste')
root.bind('<Button-3>', popup)
popup_menu = menu
root.mainloop()
对于popup()
函数,我们需要使用.post()
方法来弹出菜单。如果我们定义了多个弹出菜单,可以将其中一个赋值到一个全局变量中便于复用。
def popup(event):
popup_menu.post(event.x_root, event.y_root)
# ...
popup_menu = menu
菜单项分隔符
上面的例子中,在菜单项之间加了一个分隔符。分隔符可以使用add_separator()
方法来添加。
file_menu = Menu(menu)
menu.add_cascade(label='File', menu=file_menu)
file_menu.add_command(label='New')
file_menu.add_command(label='Open...')
file_menu.add_separator()
file_menu.add_command(label='Exit', command=root.quit)
同样,在级联菜单中也可以使用这个方法:
help_menu.add_separator()
禁用菜单项
有时,我们需要在某些情况下禁用某个菜单项。可以使用state='disabled'
参数来达到这个目的。
file_menu = Menu(menu)
menu.add_cascade(label='File', menu=file_menu)
file_menu.add_command(label='New', state='disabled')
更改菜单项标签
我们可以使用entryconfigure()
方法来更改菜单项的标签。
file_menu = Menu(menu)
menu.add_cascade(label='File', menu=file_menu)
file_menu.add_command(label='New', command=lambda: print('New'))
file_menu.add_separator()
file_menu.add_command(label='Exit', command=root.quit)
# 将"New"菜单项改为"Open"
file_menu.entryconfigure(0, label='Open')
执行这段代码后,New
菜单项将改为Open
。
高级菜单特性
Tkinter还提供了许多高级菜单特性,如复选菜单、单选菜单、快捷键等,这些特性需要更复杂的代码实现。
结论
Tkinter提供的菜单对象可以很方便地组织和管理GUI应用程序。本文介绍了如何创建简单的普通菜单和弹出菜单以及禁用和修改菜单项等操作。在Tkinter的更高级别应用程序中,菜单可以用于实现复选菜单、单选菜单、快捷键等复杂特性。