Menu 控件用于创建三种类型的菜单,即 pop-up(快捷式菜单)、toplevel(主目录)及 pull-down(下拉式菜单)。
Menu 控件的方法如下表所示:
方法 | 说明 |
---|---|
add_command(options) | 新增一个菜单项 |
add_radiobutton(options) | 创建一个选择钮菜单项 |
add_checkbutton(options) | 创建一个复选框菜单项。 |
add_cascade(options) | 将一个指定的菜单与其父菜单连接,创建一个新的级联菜单。 |
add_separator() | 新增一个分隔线 |
add(type, options) | 新增一个特殊类型的菜单项 |
delete(startindex [, endindex]) | 删除 startindex 到 endindex 之间的菜单项 |
entryconfig(index, options) | 修改index菜单项 |
index(item) | 返回index索引值的菜单项标签 |
Menu 控件的属性如下所示:
属性 | 说明 |
---|---|
accelerator | 设置菜单项的快捷键,快捷键会显示在菜单项目的右边。注意,此选项并不会自动将快捷键与菜单项连接在一起,必须另行设置。 |
command | 选择菜单项时执行的 callback 函数。 |
indicatorOn | 设置此属性,可以让菜单项选择 on 或 off |
label | 定义菜单项内的文字 |
menu | 此属性与 add_cascade() 方法一起使用,用来新增菜单项的子菜单项。 |
selectColor | 菜单项 on 或 off 的颜色。 |
state | 定义菜单项的状态,可以是 normal、active 或 disabled。 |
onvalue,offvalue | 存储在variable属性内的数值。当选择菜单项时,将onvalue内的数值复制到variable属性内。 |
tearOff | 如果此选项为True,在菜单项目的上面就会显示一个可选择的分隔线。此分隔线,会将此菜单项分离出来成为一个新的窗口 |
underline | 设置菜单项中哪一个字符要有下画线 |
value | 选择按钮菜单项的值 |
variable | 用于存储数值的变量 |
实例1:创建主目录
下面的示例将创建一个主目录(toplevel)菜单,并新增 5 个菜单项。
# Menu控件 from tkinter import * import tkinter.messagebox # 创建主窗口 win = Tk() # 执行菜单命令,显示一个对话框 def doSomething(): tkinter.messagebox.askokcancel("菜单", "你正在选择菜单命令") # 创建一一个主目录(toplevel) mainmenu = Menu(win) # 新增菜单项 mainmenu.add_command(label="文件", command=doSomething) mainmenu.add_command(label="编辑", command=doSomething) mainmenu.add_command(label="视图", command=doSomething) mainmenu.add_command(label="窗口", command=doSomething) mainmenu.add_command(label="帮助", command=doSomething) # 设置主窗口的菜单 win.config(menu=mainmenu) # 开始程序循环 win.mainloop()
结果如图所示:
选择任意一个菜单,将会弹出提示对话框,如图所示:
实例2:创建下拉菜单
下面的示例将创建一个下拉式菜单(pull-down),并在菜单项目内加入快捷键。
# 创建一个下拉式菜单 from tkinter import * import tkinter.messagebox # 创建主窗口 win = Tk() # 执行[文件/新建]菜单命令,显示一个对话框 def doFileNewCommand(*arg): tkinter.messagebox.askokcancel("菜单", "你正在选择“新建”菜单命令") # 执行[文件/打开]菜单命令,显示一一个对话框 def doFileOpenCommand(*arg): tkinter.messagebox.askokcancel("菜单", "你正在选择“打开”菜单命令") # 执行[文件/保存]菜单命令,显示-一个对话框 def doFileSaveCommand(*arg): tkinter.messagebox.askokcancel("菜单", "你正在选择“文档”菜单命令") # 执行[帮助/档]菜单命令,显示一个对话框 def doHelpContentsCommand(*arg): tkinter.messagebox.askokcancel("菜单", "你正在选择“保存”菜单命令") # 执行[帮助/文关于]菜单命令,显示一个对话框 def doHelpAboutCommand(*arg): tkinter.messagebox.askokcancel("菜单", "你正在选择“关于”菜单命令") # 创建-一个下拉式菜单(pull-down) mainmenu = Menu(win) # 新增"文件"菜单的子菜单 filemenu = Menu(mainmenu, tearoff=0) # 新增"文件"菜单的菜单项 filemenu.add_command(label="新建", command=doFileNewCommand, accelerator="Ctrl-N") filemenu.add_command(label="打开", command=doFileOpenCommand, accelerator="Ctrl-O") filemenu.add_command(label="保存", command=doFileSaveCommand, accelerator="Ctrl-S") filemenu.add_separator() filemenu.add_command(label="退出", command=win.quit) # 新增"文件"菜单 mainmenu.add_cascade(label="文件", menu=filemenu) # 新增"帮助"菜单的子菜单 helpmenu = Menu(mainmenu, tearoff=0) # 新增"帮助"菜单的菜单项 helpmenu.add_command(label="文档", command=doHelpContentsCommand, accelerator="F1") helpmenu.add_command(label="关于", command=doHelpAboutCommand, accelerator="Ctrl-A") # 新增"帮助"菜单 mainmenu.add_cascade(label="帮助", menu=helpmenu) # 设置主窗口的菜单 win.config(menu=mainmenu) win.bind("<Control-n>", doFileNewCommand) win.bind("<Control-N>", doFileNewCommand) win.bind("<Control-o>", doFileOpenCommand) win.bind("<Control-O>", doFileOpenCommand) win.bind("<Control-s>", doFileSaveCommand) win.bind("<Control-S>", doFileSaveCommand) win.bind("<F1>", doHelpContentsCommand) win.bind("<Control-a>", doHelpAboutCommand) win.bind("<Control-A>", doHelpAboutCommand) # 开始程序循环 win.mainloop()
结果如图所示:
选择“打开”子菜单,将会弹出提示对话框,如图所示:
实例3:创建快捷菜单
下面的示例将创建一个快捷式菜单(pop-up)
选择“粘贴”菜单命令,将会弹出提示对话框,如图所示: