摘要:import tkinter as tkroot = tk.Tkroot.geometry('600x400+200+200')root.title('Menu 菜单演示')menubar = tk.Menu(root)root.config(menu=men
在本文中,将介绍如何创建 tkinter 菜单栏、、菜单按钮、选项菜单,向菜单栏添加菜单以及向每个菜单添加菜单项。
当应用程序包含大量功能时,需要使用菜单来组织它们以便于导航。通常,使用菜单对相关的操作进行分组。
要创建菜单,使用如下构造函数。
menu = tk.Menu(master, **options)
1.创建一个菜单栏 menubar 并将其分配给窗口:每个顶级窗口只能有一个菜单栏。
2.在菜单栏 menubar 创建一个菜单 file_menu3.向菜单 file_menu 中添加菜单项 Exit:单击菜单项时,Python 将关闭窗口。
4.将菜单项 Exit 添加到菜单 file_menu,显示标签为 File:underline在以上示例中,将指定 File 的第一个字符,即您可以使用键盘快捷键 Alt+F。完整示例
import tkinter as tkroot = tk.Tkroot.geometry('600x400+200+200')root.title('Menu 菜单演示')menubar = tk.Menu(root)root.config(menu=menubar)file_menu = tk.Menu(menubar)file_menu.add_command( label='Exit', command=root.destroy, underline=0 )menubar.add_cascade( label="File", menu=file_menu, underline=0 ) root.mainloop默认情况下,在第一个菜单项之前会添加一条虚线。当单击虚线时,主窗口将从菜单中分离。
要删除虚线,可以为菜单添加参数 :file_menu = Menu(menubar, tearoff=False)
可以继续为菜单项添加子菜单1.创建一个菜单项:
sub_menu = tk.Menu(file_menu, tearoff=0)
2.为菜单项 3.将菜单项 sub_menu 添加到菜单 file_menu,显示标签为 关闭文件:file_menu.add_cascade(label="关闭文件", menu=sub_menu)
完整示例
import tkinter as tkroot = tk.Tkroot.geometry('600x400+200+200')root.title('Menu 菜单演示')menubar = tk.Menu(root)root.config(menu=menubar)file_menu = tk.Menu(menubar, tearoff=False)file_menu.add_command(label='新建')file_menu.add_command(label='打开...')sub_menu = tk.Menu(file_menu, tearoff=0)sub_menu.add_command(label='关闭当前文件')sub_menu.add_command(label='关闭所有文件')file_menu.add_cascade(label="关闭文件", menu=sub_menu)file_menu.add_separatorfile_menu.add_command(label='退出', command=root.destroy)menubar.add_cascade(label="文件", menu=file_menu)menubar.add_cascade(label="编辑")root.mainloopTkinter 菜单函数
菜单按钮
Menubutton 菜单按钮是菜单和按钮的组合,单击按钮时,会显示一个包含选项的菜单。
要创建Menubutton 菜单按钮,使用如下构造函数。
menu_button = tk.Menubutton(master, **options)
首先创建菜单按钮:
menubttn = tk.Menubutton(root, text = "程序设计", relief = tk.RAISED)
其次,为菜单按钮创建菜单,添加菜单项(复选、单选、菜单):
menu = tk.Menu(menubttn, tearoff = 0)
menu.add_checkbutton(label = "Python")
menu.add_radiobutton(label = "C++")
menu.add_command(label='打开')
最后,将菜单添加到菜单按钮:
menubttn["menu"] = menu
menubttn.pack(pady=20)
完整示例
import tkinter as tkroot = tk.Tkroot.geometry('600x400+200+200')root.title('Menubutton 菜单按钮演示')menubttn = tk.Menubutton(root, text = "程序设计", relief = tk.RAISED) menu = tk.Menu(menubttn, tearoff = 0)menu.add_checkbutton(label = "Python")menu.add_checkbutton(label = "Java")menu.add_radiobutton(label = "C++")menu.add_radiobutton(label = "PHP")menu.add_command(label='打开')menu.add_command(label='关闭')menubttn["menu"] = menumenubttn.pack(pady=20)root.mainloop以上示例中,为菜单按钮的菜单添加了两个复选按钮、两个单选按钮、两个菜单项。两个单选按钮不能同时选中。选项菜单 OptionMenu 小组件基本上是一个下拉列表或弹出菜单,在下拉菜单中提供一组预定义的选项,并允许用户一次选择一个选项。。
要创建选项菜单,请使用构造函数:
optionmenu = tk.OptionMenu(master, variable, value, *values, **kwargs)
完整示例
import tkinter as tkroot = tk.Tkroot.geometry('600x400+200+200')root.title('OptionMenu 选项菜单演示')option_var = tk.StringVar(root)languages = ['Python', 'JavaScript', 'Java', 'C#', 'C++']def option_changed(*args): output_label['text'] = f'你选择了:{option_var.get}'option_var.set('Language')label = tk.Label(root, text='请选择你喜欢的编程语言:')label.packoption_menu = tk.OptionMenu(root, option_var, *languages, command=option_changed)option_menu.packoutput_label = tk.Label(root, text='')output_label.packroot.mainloopoption_var:表示选项菜单选择的值;
*languages:表示选项菜单存储所有选项的列表的名称;
get:获取并返回 OptionMenu 中当前选定的选项;
set:设置 OptionMenu 中当前的选项;
如果需要在运行时修改 OptionMenu 内容,比如需要删除旧选项并插入新选项。可以使用 add_command 和 delete 方法。import tkinter as tkroot = tk.Tkroot.geometry('600x400+200+200')root.title('OptionMenu 选项菜单演示')option_var = tk.StringVar(root)languages = ('Python', 'JavaScript', 'Java', 'C#', 'C++')def option_changed(*args): output_label['text'] = f'你选择了:{option_var.get}'def delete(*args): option_menu['menu'].delete(0, 'end')def new(*args): new_options = ["New option 1", "New option 2"] for option in new_options: option_menu['menu'].add_command(label=option, command=tk._setit(option_var, option))option_var.set('Language')label = tk.Label(root, text='请选择你喜欢的编程语言:')label.packoption_menu = tk.OptionMenu(root, option_var, *languages, command=option_changed)option_menu.packoutput_label = tk.Label(root, text='')output_label.packbutton = tk.Button(root, text='删除', command=delete)button.packbutton = tk.Button(root, text='添加', command=new)button.packroot.mainloopOptionMenu 样式设置
OptionMenu 不能直接设置宽度、高度参数,需要使用 config 方法。
option_menu.config(width=10)
option_menu.config(height=2)
OptionMenu 级联菜单
import tkinter as tkroot = tk.Tkroot.geometry('600x400+200+200')root.title('OptionMenu 选项菜单演示')primary = tk.StringVarsecondary = tk.StringVar def menu_changed(*args): if primary.get == "山东省": secondary.set("济南") secondary_options = ["济南", "青岛", "淄博"] else: secondary.set("南京") secondary_options = ["南京", "苏州"] secondary_menu["menu"].delete(0, "end") for option in secondary_options: secondary_menu["menu"].add_command(label=option, command=tk._setit(secondary, option)) primary_opts = ["山东省", "江苏省"]primary_menu = tk.OptionMenu(root, primary, *primary_opts, command=menu_changed)primary.set("省份")primary_menu.config(width=15)primary_menu.packsecondary_menu = tk.OptionMenu(root, secondary, "")secondary.set("城市")secondary_menu.config(width=15)secondary_menu.packroot.mainloopOptionMenu 的唯一缺点是它无法处理大数据。由于下拉列表长度受限于屏幕大小,因此,在大量数据的情况下,可以使用 Listbox,因为它提供了滚动功能。
来源:丹丹讲教育