tkinter之菜单Menu
1、基本用法
Menu() 创建菜单
add_command() 添加命令label
from tkinter import * from tkinter import messagebox def do(name): messagebox.showinfo('提示信息', f'你点击了{name}') win = Tk() # 窗口 menu_main = Menu(win) # 创建主菜单 menu_sub = Menu(menu_main) # 创建子菜单 menu_sub.add_command(label='子菜单1', command=lambda x='子菜单1': do(x)) # 一个子菜单 menu_sub.add_command(label='子菜单2', command=lambda x='子菜单2': do(x)) # 一个子菜单 menu_sub.add_command(label='子菜单3', command=lambda x='子菜单3': do(x)) # 一个子菜单 menu_main.add_cascade(label='主菜单', menu=menu_sub) # 添加子菜单到主菜单 win.config(menu=menu_main) # 设置主菜单到界面 win.mainloop()
运行截图
2、多个主菜单
from tkinter import * from tkinter import messagebox def do(name): messagebox.showinfo('提示信息', f'你点击了{name}') win = Tk() # 窗口 menu = Menu(win) # 创建主菜单 menu_main = Menu(menu) # 创建主菜单1 menu_main.add_command(label='子菜单a', command=lambda: do('子菜单a')) # 子菜单 menu_main.add_command(label='子菜单b', command=lambda: do('子菜单b')) # 子菜单 menu_main.add_command(label='子菜单c', command=lambda: do('子菜单c')) # 子菜单 menu_main2 = Menu(menu) # 创建主菜单2 menu_main2.add_command(label='子菜单A', command=lambda: do('子菜单A')) # 子菜单 menu_main2.add_command(label='子菜单B', command=lambda: do('子菜单B')) # 子菜单 menu_main2.add_command(label='子菜单C', command=lambda: do('子菜单C')) # 子菜单 menu.add_cascade(label='主菜单1', menu=menu_main) # 添加主菜单1到主菜单上 menu.add_cascade(label='主菜单2', menu=menu_main2) # 添加主菜单2到主菜单上 win.config(menu=menu) # 设置主菜单到界面 win.mainloop()
运行截图
3、二级子菜单(多级子菜单同理)
from tkinter import * from tkinter import messagebox def do(name): messagebox.showinfo('提示信息', f'你点击了{name}') win = Tk() # 窗口 menu = Menu(win) # 创建主菜单 menu_main = Menu(menu) # 创建主菜单1 menu_main.add_command(label='子菜单a', command=lambda: do('子菜单a')) # 子菜单 menu_main.add_command(label='子菜单b', command=lambda: do('子菜单b')) # 子菜单 menu_main.add_command(label='子菜单c', command=lambda: do('子菜单c')) # 子菜单 menu_main2 = Menu(menu) # 创建主菜单2 menu_main2.add_command(label='子菜单A', command=lambda: do('子菜单A')) # 子菜单 menu_main2.add_command(label='子菜单B', command=lambda: do('子菜单B')) # 子菜单 menu_main2.add_command(label='子菜单C', command=lambda: do('子菜单C')) # 子菜单 menu_main21 = Menu(menu_main2) # 创建主菜单21 menu_main21.add_command(label='子菜单1', command=lambda: do('子菜单1')) # 子菜单 menu_main21.add_command(label='子菜单2', command=lambda: do('子菜单2')) # 子菜单 menu_main21.add_command(label='子菜单3', command=lambda: do('子菜单3')) # 子菜单 menu_main2.add_cascade(label='子菜单D', menu=menu_main21) menu.add_cascade(label='主菜单1', menu=menu_main) # 添加主菜单1到主菜单上 menu.add_cascade(label='主菜单2', menu=menu_main2) # 添加主菜单2到主菜单上 win.config(menu=menu) # 设置主菜单到界面 win.mainloop()
运行截图
4、添加分隔符
使用add_separator()添加分隔符
from tkinter import * from tkinter import messagebox def do(name): messagebox.showinfo('提示信息', f'你点击了{name}') win = Tk() # 窗口 menu_main = Menu(win) # 创建主菜单 menu_sub = Menu(menu_main) # 创建子菜单 menu_sub.add_command(label='子菜单1', command=lambda x='子菜单1': do(x)) # 一个子菜单 menu_sub.add_command(label='子菜单2', command=lambda x='子菜单2': do(x)) # 一个子菜单 menu_sub.add_command(label='子菜单3', command=lambda x='子菜单3': do(x)) # 一个子菜单 menu_sub.add_separator() menu_sub.add_command(label='子菜单4', command=lambda x='子菜单4': do(x)) # 一个子菜单 menu_main.add_cascade(label='主菜单', menu=menu_sub) # 添加子菜单到主菜单 win.config(menu=menu_main) # 设置主菜单到界面 win.mainloop()
运行截图
5、去掉虚线
上面的例子中每个主菜单或子菜单都有一个虚线,可以通过设置tearoff=0去掉。
虚线的意思是菜单是否可以独立出来为一个窗口显示,如果设置tearoff=0,表示不可以独立出来,设置tearoff=1,表示可以独立出来。
点击虚线,菜单就独立出来了
from tkinter import * from tkinter import messagebox def do(name): messagebox.showinfo('提示信息', f'你点击了{name}') win = Tk() # 窗口 menu_main = Menu(win) # 创建主菜单 menu_sub = Menu(menu_main, tearoff=0) # 创建子菜单 menu_sub.add_command(label='子菜单1', command=lambda x='子菜单1': do(x)) # 一个子菜单 menu_sub.add_command(label='子菜单2', command=lambda x='子菜单2': do(x)) # 一个子菜单 menu_sub.add_command(label='子菜单3', command=lambda x='子菜单3': do(x)) # 一个子菜单 menu_sub.add_separator() menu_sub.add_command(label='子菜单4', command=lambda x='子菜单4': do(x)) # 一个子菜单 menu_main.add_cascade(label='主菜单', menu=menu_sub) # 添加子菜单到主菜单 win.config(menu=menu_main) # 设置主菜单到界面 win.mainloop()
运行截图(去掉虚线,菜单不可独立出来,左图)(菜单独立出来效果截图,中图和右图)