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

时间:2011-03-15 06:15:06

标签: python widget tkinter

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

除了编写更新程序功能之外,还有什么我可以做的,并在最后循环:

root.after(0, updaterfunction) 

这种方法过去有用,但如果有很多事情需要检查,我担心它可能会很昂贵。

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

4 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:3)

要在选择时触发事件,请设置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()

答案 2 :(得分:1)

如果您正在使用StringVar()之类的Tkinter变量类将变量存储在Tkinter OptionMenuCheckbutton中,则可以使用其trace()方法。

trace()基本上在读取或写入变量时对其进行监视。

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

trace(mode, callback)

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

这是它的用法-

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

var = StringVar()
var.trace("w", callback)
var.set("hello")

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

答案 3 :(得分:0)

这会将下拉选项打印到控制台。但我的建议是避免在基于GUI的应用程序中使用控制台。创建一个文本指示器并向其输出输出

使用以下代码中的功能

from tkinter import *
tk = Tk()
def OptionMenu_SelectionEvent(event):
    print(var.get())
    pass
var = StringVar(); var.set("one")
options = ["one", "two", "three"]
OptionMenu(tk, var, *(options), command = OptionMenu_SelectionEvent).pack()
tk.mainloop()