Python Tkinter Menu 这个小部件的目标是允许我们创建可供我们的应用程序使用的各种菜单。核心功能提供了创建三种菜单类型的方法:弹出窗口、顶层菜单和下拉菜单。
还可以使用其他扩展 Widget 来实现新类型的菜单,例如 OptionMenu Widget,它实现一种特殊类型,用于生成所选内容中的项的弹出列表。
语法
以下是创建此小部件的简单语法 -
w = Menu ( master, option, ... )
参数
- master − :这表示父窗口。
- options − 这是此小部件最常用的选项列表。这些 options 可以用作用逗号分隔的键值对。
选项 | 描述 |
---|---|
activebackground |
当选项位于鼠标下方时,将出现在选项上的背景颜色。 |
activeborderwidth |
指定在选定项位于鼠标下时围绕选定项绘制的边框的宽度。默认值为 1 像素。 |
activeforeground |
当选选项位于鼠标下时,将出现在选选项上的前景色。 |
Bg |
不在鼠标下的选择的背景色。 |
Bd |
所有选项周围的边框宽度。默认值为 1。 |
Cursor |
当鼠标悬停在选项上时出现的光标,但仅在菜单被撕下时出现。 |
disabledforeground |
状态为 DISABLED 的项的文本颜色。 |
Font |
文本选项的默认字体。 |
Fg |
用于不在鼠标下的选项的前景色。 |
Postcommand |
您可以将此选项设置为一个过程,每次有人调出此菜单时,都会调用该过程。 |
Relief |
菜单的默认 3-D 效果是 relief=RAISED。 |
Image |
在此菜单上显示图像按钮。 |
Selectcolor |
指定选中 checkbutton 和 radiobuttons 时在 checkbuttons 和 radiobuttons 中显示的颜色。 |
Tearoff |
通常,菜单可以撕下,选项列表中的第一个位置(位置 0)被 tear-off 元素占据,并从位置 1 开始添加其他选项。如果设置 tearoff=0,则菜单将不具有撕裂功能,并且将从位置 0 开始添加选项。 |
Title |
通常,可撕下菜单窗口的标题将与指向此菜单的 menubutton 或 cascade 的文本相同。如果要更改该窗口的标题,请将 title 选项设置为该字符串。 |
方法
这些方法可用于 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(item) |
返回给定菜单项标签的索引号。 |
insert_separator ( index ) |
在 index 指定的位置插入新的分隔符。 |
invoke ( index ) |
调用与 location 索引处的选择关联的命令回调。如果是 checkbutton,则其 state 在 set 和 cleared之间切换;如果是 RadioButton,则设置该选项。 |
type ( index ) |
返回 index 指定的选项类型: “cascade”, “checkbutton”, “command”, “radiobutton”、“separator” 或 “tearoff”。 |
例
请自行尝试以下示例 -
from tkinter import *
def donothing():
filewin = Toplevel(root)
button = Button(filewin, text="Do nothing button")
button.pack()
root = Tk()
menubar = Menu(root)
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label="New", command=donothing)
filemenu.add_command(label="Open", command=donothing)
filemenu.add_command(label="Save", command=donothing)
filemenu.add_command(label="Save as...", command=donothing)
filemenu.add_command(label="Close", command=donothing)
filemenu.add_separator()
filemenu.add_command(label="Exit", command=root.quit)
menubar.add_cascade(label="File", menu=filemenu)
editmenu = Menu(menubar, tearoff=0)
editmenu.add_command(label="Undo", command=donothing)
editmenu.add_separator()
editmenu.add_command(label="Cut", command=donothing)
editmenu.add_command(label="Copy", command=donothing)
editmenu.add_command(label="Paste", command=donothing)
editmenu.add_command(label="Delete", command=donothing)
editmenu.add_command(label="Select All", command=donothing)
menubar.add_cascade(label="Edit", menu=editmenu)
helpmenu = Menu(menubar, tearoff=0)
helpmenu.add_command(label="Help Index", command=donothing)
helpmenu.add_command(label="About...", command=donothing)
menubar.add_cascade(label="Help", menu=helpmenu)
root.config(menu=menubar)
root.mainloop()
执行上述代码时,它会产生以下结果 -
