5、菜单Menu

菜单的信息量是⾮常⼤的,给用户提供导航使用,由于菜单⼜可以有⼦菜单,因此菜单的信息量⾮常⼤。菜单的分类也较多,通常可以分为下拉菜单、弹出菜单等等。

顶层菜单

import tkinter as tk

root = tk.Tk()

# 主菜单
root_menu = tk.Menu(root)

f_menu = tk.Menu(root_menu) # 文件菜单
f_menu.add_command(label='Open',command=lambda :print('File - Open'))
f_menu.add_command(label='Save',command=lambda :print('File - Save'))

e_menu = tk.Menu(root_menu) # 编辑菜单
e_menu.add_command(label='Copy',command=lambda :print('Edit - Copy'))
e_menu.add_command(label='Undo',command=lambda :print('Edit - Undo'))

# 将一级菜单绑定到主菜单
root_menu.add_cascade(label='File',menu=f_menu)
root_menu.add_cascade(label='Edit',menu=e_menu)

# 将主菜单绑定到窗口
root['menu'] = root_menu

root.mainloop()

image-20250414161248988

弹出菜单

弹出菜单⼜叫“上下⽂菜单”,也叫“右键菜单”,它通常是⿏标单击右键产⽣的菜单,因此会有“右键菜单” 的说法,但是弹出菜单的触发方式不一定非得右键触发。

⼤体思路就是:我们先新建⼀个菜单,然后向菜单项中添加各种功能,最后我们监听⿏标右键消息,如果是⿏标右键被单击,此时可以根据需要判断下⿏标位置来确定是哪个弹出菜单被弹出,然后使⽤ Menu 类的 pop ⽅法来弹出菜单。

Menu 类⾥⾯有⼀个 post ⽅法,它接收两个参数,即 x 和 y 坐标,它会在相应的位置弹出菜单。

import tkinter as tk

root = tk.Tk()

# 创建菜单
pop_menu = tk.Menu(root)
# 创建菜单item
pop_menu.add_command(label='copy',command=lambda :print('copy'))
pop_menu.add_command(label='undodo',command=lambda :print('undodo'))

# 绑定监听右键事件,弹出菜单
root.bind('<Button-3>',lambda e : pop_menu.post(e.x_root,e.y_root))

root.mainloop()

image-20250414164227004