在tkinter中,可以通过Menu类为窗口创建工具栏菜单。
1 工具栏菜单的创建
1.1 单层菜单的创建
1.1.1 实例化菜单类
要为窗口创建工具栏菜单,首先要实例化菜单类,代码如图1所示。
图1 实例化菜单类
其中,Menu的参数win指定了菜单所属的窗口,menubar即为Menu类的实例。
1.1.2 添加菜单项
通过menubar添加菜单项,代码如图2所示。
图2 添加菜单项
通过Menu类的实例,调用了add_command()方法添加菜单项。其中,label参数表示添加菜单项的内容。以上代码的作用是为menubar菜单添加了两项,一项是“播放音乐”,另外一项是“停止播放”。
1.1.3 关联窗口与菜单
通过窗口实例win将窗口与菜单关联,代码如图3所示。
图3 关联窗口与菜单
其中,config()方法的作用是对窗口进行配置,menu参数表示指定窗口的菜单,menubar即为创建的工具栏菜单。
1.1.4 运行效果
添加工具栏菜单之后的窗口,如图4所示。
图4 运行效果
1.2 多层菜单的创建
多层菜单中的项会含有子菜单,如图5所示。
图5 多层菜单
从图5中可以看出,窗口的工具栏菜单“文件”,又包含了子菜单“打开”和“新建”。
1.2.1 创建子菜单
通过图6所示的代码创建子菜单。
图6 创建子菜单
sub_menubar即为创建的子菜单,Menu的第一个参数表示创建的子菜单属于menubar工具栏菜单,tearoff参数设置为False表示子菜单中不含有分割线。
1.2.2 添加子菜单项
通过图7所示的代码添加子菜单项。
图7 添加子菜单项
其中,add_command()方法在“1.1.2 添加菜单项”中已经介绍。
1.2.3 关联工具栏菜单与子菜单
通过图8所示的代码关联工具栏菜单与子菜单。
图8 关联工具栏菜单与子菜单
其中,menubar是工具栏菜单,通过该变量调用的add_cascade()方法来为菜单添加子菜单。label参数指定了子菜单项显示的内容,menu参数指定了添加的子菜单,sub_menubar即为在“1.2.1 创建子菜单”中创建的子菜单。以上代码运行的效果如图5所示。
2 菜单项响应的添加
菜单项响应,就是当点击了某个菜单项后,完成的动作。例如,当点击了“播放音乐”项后,指定的音频文件就会播放,当点击了“停止播放”后,音频播放就会停止。在创建菜单项时,指定该菜单项的响应函数即可。将图2所示的代码修改为图9所示的代码。
图9 菜单项响应的添加
其中,command参数表示菜单项响应函数,play()和stop()是自定义函数,功能分别是播放指定的音频文件和停止播放,请参考《Python中tkinter编程入门6-CSDN博客》。
3 完整代码
完整代码如图下所示。
import pygame
import tkinter
def play():
pygame.mixer.music.load('d:/1.mp3')
pygame.mixer.music.play()
def stop():
pygame.mixer.music.stop()
pygame.mixer.music.unload()
win = tkinter.Tk()
menubar = tkinter.Menu(win)
menubar.add_command(label='播放音乐', command=play)
menubar.add_command(label='停止播放', command=stop)
sub_menubar = tkinter.Menu(menubar, tearoff=False)
sub_menubar.add_command(label='打开')
sub_menubar.add_command(label='新建')
menubar.add_cascade(label='文件', menu=sub_menubar)
win.config(menu=menubar)
pygame.mixer.init()
win.mainloop()