15. 小部件Menu
“下拉菜单”是一种流行的方式 为用户提供多种选择,但占用 应用程序表面的最小空间,当 用户没有做出选择。
-
菜单按钮是 始终显示在应用程序上。
-
菜单是选项列表 仅在用户单击 菜单按钮。
-
要选择一个选项,用户可以将鼠标从 菜单按钮向下转到其中一个选项。 或者,他们可以单击并释放 菜单按钮:选项将出现并保留到 用户单击其中一个。
-
Unix版本的Tkinter(至少)支持。 “撕下菜单。”如果你作为设计师 希望如此,选项上方将出现一条虚线。 用户可以单击此行以“撕裂 关闭“菜单:新的、独立的、独立的 窗口出现,其中包含选项。
请参阅下面的第 16 节 “菜单按钮小部件”,了解如何 创建一个菜单按钮并将其连接到菜单小部件。第一 让我们看一下小部件,它 显示选项列表。Menu
菜单上显示的选项可以是以下任何内容:
-
一个简单的命令:一个文本字符串(或图像),即 用户可以选择执行某些操作。
-
级联:文本字符串或 用户可以选择以显示另一个整体的图像 菜单选择。
-
复选按钮(请参见第 9 节 “复选按钮小部件”)。
-
一组单选按钮(请参见第 20 节 “单选按钮小部件”)。
要创建一个菜单小部件,您必须首先创建一个 ,我们将它称为:Menubutton
mb
w = tk.Menu(mb,option, ...)
此构造函数返回新小部件。选项包括:Menu
表 23.菜单
小部件选项
activebackground | 将显示在选项上的背景色 当它在鼠标下方时。请参见第 5.3 节 “颜色”。 |
activeborderwidth | 指定围绕 选择何时在鼠标下方。默认值为 1 像素。有关可能的值,请参见第 5.1 节 “维度”。 |
activeforeground | 当选项位于 鼠。 |
bg 或background | 不在鼠标下方的选项的背景色。 |
bd 或borderwidth | 所有选择周围的边框宽度;请参见第 5.1 节 “尺寸”。默认值为 <> 像素。 |
cursor | 鼠标悬停在 选择,但仅当菜单被撕掉时。 请参见第 5.8 节 “游标”。 |
disabledforeground | 文本的颜色 对于其为 的项目。state tk.DISABLED |
font | 文本选择的默认字体。请参见第 5.4 节 “键入字体”。 |
fg 或foreground | 用于不在鼠标下方的选项的前景色。 |
postcommand | 您可以将此选项设置为过程,并且 每次有人带来时都会调用程序 上此菜单。 |
relief | 菜单的默认三维效果为 。有关其他选项,请参见第 3.5 节 “浮雕样式”。relief=tk.RAISED |
selectcolor | 指定在复选框和单选按钮中显示的颜色 被选中。 |
tearoff | 通常,菜单可以被撕掉:第一个 选项列表中的位置(位置 0)是 被撕下元件占据,并且 从位置开始添加其他选项 1.如果设置,菜单 不会有撕掉功能,选择会 从位置 0 开始添加。tearoff=0 |
tearoffcommand | 如果您希望程序在以下情况下收到通知 用户单击菜单中的撕下条目, 将此选项设置为您的过程。这将是 使用两个参数调用:窗口 ID 父窗口和新窗口的窗口 ID 撕下菜单的根窗口。 |
title | 通常,撕下菜单窗口的标题将 与菜单按钮的文本相同,或 级联,通向此菜单。如果你愿意 更改该窗口的标题,将选项设置为该字符串。title |
这些方法可用于对象。 在菜单上创建选项的人有自己的选择 特定选项;请参见第 15.1 节 “菜单项创建 (coption) 选项”。Menu
.add(
kind
, coption, ...)
添加给定的新元素作为下一个可用元素 此菜单中的选项。参数可以是 、、 或 中的任何一个。根据参数,此方法是 等效于 、 等;指 这些方法在下面了解详细信息。kind
kind
'cascade'
'checkbutton'
'command'
'radiobutton'
'separator'
kind
.add_cascade()
.add_checkbutton()
.add_cascade(coption, ...)
添加新的级联元素作为下一个可用元素 此菜单中的选项。使用此调用中的选项 将级联连接到下一级的菜单,一个 类型的对象。menu
Menu
.add_checkbutton(coption, ...)
添加新的复选框作为下一个可用选项 自我。这些选项允许您设置 复选框与设置复选框对象的方式大致相同;请参见第 15.1 节 “菜单项创建 (coption) 选项”。
.add_command(coption, ...)
添加新命令作为下一个可用选项 自我。使用 、 或 选项可以 在菜单上放置文本或图像;使用该选项将此选项连接到 当此选项为 拿。label
bitmap
image
command
.add_radiobutton(coption, ...)
添加新的单选按钮作为下一个可用选项 自我。这些选项允许您设置单选按钮 与设置对象的方式大致相同;请参见第 20 节 “单选按钮小部件”。Radiobutton
.add_separator()
在当前定义的最后一个分隔符之后添加分隔符 选择。这只是一条规则水平线,你可以 用于设置选项组。分隔符是 算作选择,所以如果你已经有三个 选择,并添加分隔符,分隔符将 占据位置 3(从 0 开始计算)。
.delete(
index1
, index2
=None)
此方法删除从 到 、 中编号的选项。 包容。要删除一个选项,请省略该参数。 您无法使用此方法删除撕下的内容 选择,但您可以通过设置菜单来做到这一点 对象的撕下选项为 0。index1
index2
index2
.entrycget(
index
, coption)
要检索某个选项的当前值以供选择, 调用此方法,设置为 该选择的索引,并设置为 所需选项的名称。index
coption
.entryconfigure(
index
, coption, ...)
要更改某个选项的当前值, 调用此方法,设置为 该选择的索引以及一个或多个参数。index
coption
=value
.index(
i
)
返回由索引 指定的选项的位置。为 例如,您可以使用 查找最后一个选项的索引(或者如果没有选项)。i
.index(tk.END)
None
.insert_cascade(
index
, coption, ...)
在 给出的位置插入一个新的级联,计数 从 0.该位置之后的任何选择都会向下移动 一。选项与上面的 相同。index
.add_cascade()
.insert_checkbutton(
index
, coption, ...)
在索引
指定的位置插入一个新的复选按钮。选项是 与上面的 相同。.add_checkbutton()
.insert_command(
index
, coption, ...)
在位置插入一个新命令。选项 与 相同 , 以上。index
.add_command()
.insert_radiobutton(
index
, coption, ...)
在位置插入一个新的单选按钮。选项 与上面的 相同。index
.add_radiobutton()
.insert_separator(
index
)
在 指定的位置插入新的分隔符。index
.invoke(index)
调用关联的回调 在位置选择.如果 复选框,其状态在设置和之间切换 清除;如果是单选按钮,则设置该选择。command
index
.post(
x
, y
)
在相对于根窗口的位置显示此菜单。(
x
, y
)
.type(
index
)
返回由 指定的选项的类型: 、、、、 或 。index
tk.CASCADE
tk.CHECKBUTTON
tk.COMMAND
tk.RADIOBUTTON
tk.SEPARATOR
tk.TEAROFF
.yposition(
n
)
对于菜单选项,返回以像素为单位的垂直偏移量 相对于菜单的顶部。这样做的目的 方法是允许您放置弹出菜单 精确地相对于当前鼠标位置。n
th
15.1. 项目创建 () 选项Menu
coption
只要上述菜单方法允许 ,您就可以将值应用于任何 下面的选项名称,方法是使用选项名称作为关键字 具有所需值的参数。例如,要使 命令的文本以红色字母显示,请使用 “” 作为方法调用的选项。coption
foreground='red'
add_command
表 24.菜单
项选项
值
accelerator | 在右侧显示“”击键组合 菜单选项,使用选项 “” 其中是包含 要显示的字符。例如,到 指示命令将 Control-X 作为其加速器,请使用 选项 “”。请注意,此选项不会 实际实施加速器;使用 击键绑定来执行此操作。accelerator accelerator=
accelerator='^X' |
activebackground | 用于选择时的背景色 在鼠标下方。 |
activeforeground | 用于选择的前景色 在鼠标下方。 |
background | 用于选择时的背景色 不在鼠标下方。 请注意,这不能 缩写为 。bg |
bitmap | 显示此选项的位图;请参见第 5.7 节 “位图”。 |
columnbreak | 通常所有选项都显示在一个选项中 长列。如果设置 ,则此选项将启动 包含 以前的选择。columnbreak=1 |
columnbreak | 使用选项 “” 开始新的选项列 这个选择。columnbreak=True |
command | 当此选择是 激活。 |
compound | 如果要同时显示文本和图形 (位图或图像)在菜单选项上, 使用此选项指定 图形相对于文本的位置。 值可以是 、 、 、 或 中的任何一个。例如,值 “”会 将图形放在文本上方。coption tk.LEFT tk.RIGHT tk.TOP tk.BOTTOM tk.CENTER tk.NONE compound=tk.TOP |
font | 用于呈现文本的字体。请参见第 5.4 节 “类型字体”label |
foreground | 用于选择的前景色 当它们不在 鼠。请注意,这不能缩写为 。fg |
hidemargin | 默认情况下,较小的边距分隔相邻的 菜单中的选项。使用“” 以抑制此边距。例如,如果您的 选择是调色板上的颜色样本,这 选项将使色板接触没有任何 其他中间颜色。coption hidemargin=True |
image | 显示此选项的图像;请参见第 5.9 节 “图像”。 |
label | 要为此选项显示的文本字符串。 |
menu | 此选项仅用于级联选择。 将其设置为一个对象 显示下一级选择。Menu |
offvalue | 通常,复选框的控制变量 设置为 当复选按钮 已关闭。您可以通过设置 此选项为所需值。请参见第 52 节 “控制变量:小部件背后的值”。0 |
onvalue | 通常,复选框的控制变量 设置为 当复选按钮 已打开。您可以通过设置 此选项为所需值。1 |
selectcolor | 通常,颜色显示在一组中 复选按钮或单选按钮为红色。改变它 通过将此选项设置为颜色来着色 要;请参见第 5.3 节 “颜色”。 |
selectimage | 如果您正在使用该选项 在菜单上显示图形而不是文本 单选按钮或复选按钮,如果使用 ,则当项目为 选择。image selectimage=
|
state | 通常,所有选择都会对鼠标单击做出反应,但是 您可以设置为灰色 它出来并使其无响应。这将是鼠标悬停在选择上时。state=tk.DISABLED coption tk.ACTIVE |
underline | 通常,其中没有字母带有下划线。设置此选项 到字母的索引以强调 信。label |
value | 指定关联控件的值 变量(请参见第 52 节 “控制变量:小部件后面的值”),用于单选按钮。 如果控制变量为 一个 ,或一个字符串,如果 控制变量为 .IntVar StringVar |
variable | 对于复选按钮或单选按钮,此选项 应设置为关联的控制变量 带有复选按钮或单选按钮组。 请参见第 52 节 “控制变量:小部件背后的值”。 |
15.2. 顶级菜单
特别是在MacOS下,有时需要 创建显示为顶级菜单的菜单 窗。为此,请按照下列步骤操作。
-
使用任何小部件,使用该方法获取顶级窗口。
W
W
.winfo_toplevel() -
创建小部件,使用 顶级窗口作为第一个参数。
Menu
-
添加到此微件的项目 将显示在应用程序的顶部。
Menu
下面是一个简短的示例。假设它是应用程序实例,一个类的实例 继承自 。此代码将 创建名为“帮助”的顶级菜单选项,其中包含一个名为 “关于”那叫 名为 的处理程序:self
Frame
self.__aboutHandler
top = self.winfo_toplevel()self.menuBar = tk.Menu(top)top['menu'] = self.menuBarself.subMenu = tk.Menu(self.menuBar)self.menuBar.add_cascade(label='Help', menu=self.subMenu)self.subMenu.add_command(label='About', command=self.__aboutHandler)
行为会有一些变化,具体取决于您的 平台。
-
在 Windows 或 Unix 系统下,顶级菜单 选项显示在应用程序主节点的顶部 窗。
-
在 MacOS X 下,顶级菜单选项显示在 应用程序处于活动状态时的屏幕顶部, 就在Mac用户希望看到它们的地方。
您必须使用该方法 对于顶部菜单栏上所需的所有项目。 对 、 或的调用将被忽略。
.add_cascade()
.add_checkbutton()
.add_command()
.add_radiobutton()
16. 小部件Menubutton
菜单按钮是下拉菜单中保持打开状态的一部分 屏幕一直。每个菜单按钮都是关联的 带有一个小部件(见上文),可以 显示该菜单的选项按钮,当用户 点击它。Menu
要在根窗口或框架中创建菜单按钮:parent
w = tk.Menubutton( parent , option , ...)
构造函数返回新小部件。选项:Menubutton
表 25.菜单按钮
小部件选项
activebackground | 鼠标悬停在 菜单按钮。请参见第 5.3 节 “颜色”。 |
activeforeground | 鼠标悬停在菜单按钮上时的前景色。 |
anchor | 此选项控制文本的位置 如果小部件的空间大于文本需要的空间。 缺省值为 ,这 使文本居中。有关其他选项,请参见第 5.5 节 “锚点”。例如,如果使用 ,则文本将居中 靠在小部件的左侧。anchor=tk.CENTER anchor=tk.W |
bg 或background | 鼠标不在菜单按钮上时的背景色。 |
bitmap | 要在菜单按钮上显示位图,请设置此项 位图名称选项;请参见第 5.7 节 “位图”。 |
bd 或borderwidth | 菜单按钮周围的边框宽度。违约 是两个像素。有关可能的值,请参见第 5.1 节 “维度”。 |
compound | 如果同时指定文本和图形( 位图或图像),此选项指定位置 图形相对于文本显示。可能 值为 (默认值)、、、、 和 。例如,将定位图形 在文本的右侧。如果指定 ,则显示图形 但(如果有的话)不是。tk.NONE tk.TOP tk.BOTTOM tk.LEFT tk.RIGHT tk.CENTER compound=tk.RIGHT compound=tk.NONE text |
cursor | 鼠标悬停在此位置上时出现的光标 菜单按钮。请参见第 5.8 节 “游标”。 |
direction | 通常,菜单将显示在 菜单按钮。设置为 在按钮左侧显示菜单;用于显示菜单 在按钮的右侧;或用于放置上面的菜单 按钮。direction=tk.LEFT direction=tk.RIGHT direction='above' |
disabledforeground | 禁用此菜单按钮时显示的前景色。 |
fg 或foreground | 鼠标不在菜单按钮上时的前景色。 |
font | 指定用于显示 ;请参见第 5.4 节 “键入字体”。text |
height | 菜单按钮的高度(以文本行为单位)(不是像素! 默认设置是使菜单按钮的大小适合其 内容。 |
highlightbackground | 焦点的颜色 当小组件没有焦点时突出显示。请参见第 53 节 “焦点:路由键盘输入”。 |
highlightcolor | 颜色显示在 当小组件具有焦点时,焦点突出显示。 |
highlightthickness | 焦点突出显示的厚度。 |
image | 要在此菜单上显示图像按钮,请设置此 图像对象的选项。请参见第 5.9 节 “图像”。 |
justify | 此选项控制文本在以下情况下的位置 文本未填充菜单按钮:用于左对齐文本 (这是默认值);用于居中或右对齐。justify=tk.LEFT justify=tk.CENTER justify=tk.RIGHT |
menu | 要将菜单按钮与一组选项相关联, 将此选项设置为对象 包含这些选择。该菜单对象必须 已通过传递关联的 菜单按钮作为构造函数的第一个 论点。有关显示如何 关联菜单按钮和菜单。Menu |
padx | 在左右边留多少空间 菜单按钮的文本。默认值为 1。 |
pady | 在文本上方和下方留出多少空间 菜单按钮。默认值为 1。 |
relief | 通常,菜单按钮将具有外观。有关其他 3-D 效果,请参见第 5.6 节 “浮雕样式”。tk.RAISED |
state | 通常,菜单按钮响应鼠标。设置为灰显 菜单按钮并使其无响应。state=tk.DISABLED |
takefocus | 通常,菜单按钮不占用键盘焦点 (请参见第 53 节 “焦点:路由键盘输入”)。用于将菜单按钮添加到 焦点遍历顺序。takefocus=True |
text | 要在菜单按钮上显示文本,请设置此选项 到包含所需文本的字符串。 字符串中的换行符 () 将导致换行符。'\n' |
textvariable | 您可以将类的控制变量与此菜单按钮相关联。设置 该控制变量将更改显示的 发短信。请参见第 52 节 “控制变量:小部件背后的值”。StringVar |
underline | 通常,在 上的文本下方不显示下划线 菜单按钮。为其中一个下划线 字符,将此选项设置为该 字符。 |
width | 菜单按钮的宽度(以字符为单位)(不是像素!如果 未设置此选项,标签的大小将调整为 适合其内容。 |
wraplength | 通常,行不会换行。您可以设置此项 选项为多个字符,所有行都将 被分成不超过该数字的碎片。 |
下面是一个简短的示例,显示了 菜单按钮及其带有两个复选框的关联菜单:
self.mb = tk.Menubutton(self, text='condiments',relief=RAISED)self.mb.grid()self.mb.menu = tk.Menu(self.mb, tearoff=0)self.mb['menu'] = self.mb.menuself.mayoVar = tk.IntVar()self.ketchVar = tk.IntVar()self.mb.menu.add_checkbutton(label='mayo',variable=self.mayoVar)self.mb.menu.add_checkbutton(label='ketchup',variable=self.ketchVar)
本示例创建一个标有 的菜单按钮。单击时,两个标记和的复选按钮将下拉。condiments
mayo
ketchup