如何更新 OptionMenu 的命令

Pab*_*blo 2 python tkinter

我正在尝试在实例化后设置或更新 OptionMenu 的命令。

widget.configure(command=foo)语句适用于Buttonand CheckButton,但不适用于OptionMenu

以下代码引发此错误:_tkinter.TclError: unknown option "-command"

from Tkinter import Tk, OptionMenu, StringVar

root = Tk()
var = StringVar()

def foo(val):
    print val, var.get()

widget = OptionMenu(root, var, "one", 'two')
widget.configure(command=foo)
widget.pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

Gun*_*one 5

好问题!这是一件好事,我以前从未在任何一个项目中这样做过,因为(除非有人证明我错了)一旦定义了 OptionMenu 小部件的命令,就无法设置/更新它。

如果 Tkinter 希望你能够做到这一点,它肯定会包含它以供编辑.configure()

有一个方便的函数.keys(),您可以使用小部件对象调用它来查看可与 一起使用的所有可用特征.configure()

按钮示例:

from tkinter import *

master = Tk()

def callback():
    print ("click!")

b = Button(master, text="OK", command=callback)
print (b.keys()) #Printing .keys()
b.pack()

mainloop()
Run Code Online (Sandbox Code Playgroud)

结果是: 在此输入图像描述

请注意,在这个巨大的键列表中,'command'第二行是怎样的?那是因为按钮command可以用于.configure()

选项菜单示例:

from tkinter import *

root = Tk()
var = StringVar()

def foo(val):
    print ("HI")

widget = OptionMenu(root, var, "one", 'two')
print(widget.keys())
widget.pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

结果是: 在此输入图像描述

'command'请注意,这次第 2 行没有。这是因为您无法command使用 OptionMenu 小部件进行配置。

希望这个问题不会对您的程序造成太大影响,希望我的回答可以帮助您更好地理解!

  • 实际上,您_可以_更改选项菜单的命令,但它被隐藏是有原因的——当有人从列表中选择一个项目时,每个菜单项的命令属性在内部用于更改选项菜单的值。如果更改此命令,可能会破坏选项菜单行为。然而,最终,选项菜单只不过是一个 Menubutton 和一个 Menu,并且 tkinter 在内部使用菜单上的命令属性来保持它们同步。 (2认同)