跳至正文
View Categories

1 min read

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 控件常用方法

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用于存储数值的变量
Menu 常用控件属性

实例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)

选择“粘贴”菜单命令,将会弹出提示对话框,如图所示: