菜单通常位于窗口标题栏下方,将操作的相关指令集结,只要用户单击某个指令,就能执行相关的处理过程。要产生菜单,就得使用Menu控件,不过Menu控件只能产生菜单的骨架,还必须配合Menu控件的相关方法。

在开始制作菜单之前,先来认识下菜单的组成。

  • 主菜单项:Python中称为pulldownmenu(下拉菜单)。要产生下拉菜单,可用Menu控件的add_cascade()方法协助
  • 下拉菜单项(第二层菜单):有了主菜单项之后才能继续设置下拉菜单项。例如位于File主菜单的下拉菜单项有Open、Save等。这些菜单有点像按钮,可调用add_command()方法来处理。也有可能是一个群组,只能单选其中一个,add_Radiobutton()方法就符合这种需求。
  • 分割线:下拉菜单项之间若要进行分隔,则可调用add_separator()方法加入分割线。
  • 快捷键:对应下拉菜单项,用Accelecrator key来表示。根据它的设置能够快速执行某个菜单项对应的指令。

下表列出了Menu控件的有关方法:

方法 说明
activate(index) 动态方法
add(type,**options) 增加菜单项
add_cascade(**options) 增加主菜单项
add_checkbutton(**options) 加入checkbutton(复选按钮或复选框)
add_command(**options) 以按钮形式添加子菜单项
add_radiobutton(**options) 以单选按钮形式添加子菜单项
add_separator(**options) 加入分割线,用于菜单之间

add()方法中的参数type可用来指定菜单的种类,包括command、cascade(submenu)、checkbutton、radiobutton、separator等

至于如何使用menu控件来产生菜单,可参考以下步骤

1.先创建主窗口对象,再把menu控件放入主窗口中,接着用menu控件的实例menubar来存储

root = Tk()
menubar = Menu(root) # 将Menu控件加入主窗口,产生菜单骨架

2.将菜单对象menubar布置到主窗口的顶部,并显示于界面中

root.config(menu = menubar) # 显示菜单

3.加入主菜单项

menu_file = Menu(menuBar,tearoff = 0)

创建主菜单项menu_file并加入到menubar(菜单栏对象)中,将tearoff值设为0,避免第一个子菜单项的上方有虚线

4.调用add_cascade()方法产生主菜单项的实例

menuBar.add_casscade(label = 'File',menu=menu_file)

通常到此步骤才能看到菜单显示于主窗口中。调用add_cascade()产生主菜单项时,用label设置其名称,将menu_file赋值内menu,如此添加的菜单项File才能真正加入菜单栏对象menuBar。

5.加入下拉菜单的菜单项

filemenu.add_command(label='Open',command = OpenFile)

有了主菜单项File之后,调用add_command()方法以按钮性质产生下拉菜单的菜单项,因为时按钮,所以参数command要有响应方法进行响应。

下面用实例来说明如何用Menu控件创建菜单。

from tkinter import *


# 定义响应函数
def newFile():
    print('New File!')


def openFile():
    print('Open File!')


def saveFile():
    print('Save File!')


def About():
    print('这是一个帮助菜单')


# 主窗口对象
win = Tk()
win.title('菜单')

# Step1.产生菜单对象menuBar,加到主窗口对象中
menuBar = Menu(win)
# Step2 将菜单对象menubar布置到主窗口的顶部,显示于界面中
win.config(menu=menuBar)
# Step3 加入主菜单项
menu_file = Menu(menuBar, tearoff=0)
menu_font = Menu(menuBar, tearoff=0)
menu_help = Menu(menuBar, tearoff=0)
# Step4 调用add_cascade()方法产生主菜单项的实例
menuBar.add_cascade(label='文件', menu=menu_file)
menuBar.add_cascade(label='字体', menu=menu_font)
menuBar.add_cascade(label='在线帮助', menu=menu_help)

# Step5 加入下拉菜单的菜单项
# File菜单
menu_file.add_command(label='新建', command=newFile)
menu_file.add_command(label='打开', command=openFile, underline=1, accelerator='Ctrl+O')
menu_file.add_separator()  # 加入分割线
menu_file.add_command(label='保存', command=saveFile)
menu_file.add_separator()  # 加入分割线
menu_file.add_command(label='退出', command=lambda: win.destroy())
# Font菜单
labels = (12, 14, 16, 18)
for item in labels:
    menu_font.add_radiobutton(label=item)
# 帮助菜单
menu_help.add_command(label='关于', command=About)
mainloop()

发表评论

邮箱地址不会被公开。 必填项已用*标注