如何检测OptionMenu或Checkbutton何时发生变化?

Ama*_*rok 4 python tkinter widget

我的tkinter应用程序有几个控件,我想知道它们何时发生任何更改,以便我可以更新应用程序的其他部分.

有没有什么我可以做的没有写一个更新程序功能,并在最后循环:

root.after(0, updaterfunction) 
Run Code Online (Sandbox Code Playgroud)

这种方法过去一直有效,但我担心如果有很多事情要检查它可能会很昂贵.

即使我确实使用了这种方法,我是否可以通过仅更新具有已更改变量的项目来节省资源?如果是这样,请分享如何,因为我不确定如何检测更新功能之外的特定更改.

Bry*_*ley 9

许多tkinter控件可以与变量相关联.对于那些你可以对变量进行跟踪,以便在变量发生变化时调用某些函数.

有关变量跟踪的更多信息,请参见http://effbot.org/tkinterbook/variable.htm.它们是tk众多伟大,新颖的特征之一.


小智 5

要在进行选择时触发事件,请设置 OptionMenu 的命令选项

前任。

def OptionMenu_SelectionEvent(event): # I'm not sure on the arguments here, it works though
    ## do something
    pass

var = StringVar()
var.set("one")
options = ["one", "two", "three"]
OptionMenu(frame, var, *(options), command = OptionMenu_SelectionEvent).pack()
Run Code Online (Sandbox Code Playgroud)

  • OptionMenu 不能有一个链接到它的命令来执行一些其他功能,就像按钮对象可以有一个命令链接到它一样。OptionMenu 只是基本上允许用户将一些变量设置为预定义的列表(即 OptionMenu 的菜单项),然后如果您在其上设置“command = xxx”,它就不会触发其他操作。要触发更改所选选项的操作,您需要使用类似上述 Bryan 状态的跟踪。 (3认同)

sha*_*912 5

如果您使用 Tkinter Variable 类StringVar()将变量存储在 TkinterOptionMenu或 中Checkbutton,则可以使用它的trace()方法。

trace(),基本上,在读取或写入变量时监视变量。

trace()方法采用 2 个参数 -modefunction callback

trace(mode, callback)

  • mode 参数是“r”(当变量被某人读取时调用观察者)、“w”(当变量被某人写入时调用)或“u”(未定义;当变量被删除时调用)之一。
  • 回调参数是您要在变量更改时对函数进行的调用。

这是它的使用方式 -

def callback(*args):
    print("variable changed!")

var = StringVar()
var.trace("w", callback)
var.set("hello")
Run Code Online (Sandbox Code Playgroud)

来源:http : //effbot.org/tkinterbook/variable.htm