菜单的信息量是⾮常⼤的,给用户提供导航使用,由于菜单⼜可以有⼦菜单,因此菜单的信息量⾮常⼤。菜单的分类也较多,通常可以分为下拉菜单、弹出菜单等等。
add_commmand
⽅法来为它添加菜单项, 如果该菜单是顶层菜单,则添加的菜单项依次向右添加。 如果该菜单时顶层菜单的⼀个菜单项,则它添加的是下拉菜单的菜单项。add_command
中的参数常⽤的有 label 属性,⽤来指定的 是菜单项的名称, command
属性⽤来指定被点击的时候调⽤的⽅法, acceletor
属性指定的是快捷键, underline
属性是是否拥有下划线。menu
属性指定我们使⽤哪⼀个作为它的顶层菜单。add_cascade
方法添加子菜单即可。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()
弹出菜单⼜叫“上下⽂菜单”,也叫“右键菜单”,它通常是⿏标单击右键产⽣的菜单,因此会有“右键菜单” 的说法,但是弹出菜单的触发方式不一定非得右键触发。
⼤体思路就是:我们先新建⼀个菜单,然后向菜单项中添加各种功能,最后我们监听⿏标右键消息,如果是⿏标右键被单击,此时可以根据需要判断下⿏标位置来确定是哪个弹出菜单被弹出,然后使⽤ 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()