我的tkinter应用程序有几个控件,我想知道它们何时发生任何更改,以便我可以更新应用程序的其他部分。
除了编写更新程序功能之外,还有什么我可以做的,并在最后循环:
root.after(0, updaterfunction)
这种方法过去有用,但如果有很多事情需要检查,我担心它可能会很昂贵。
即使我确实使用过这种方法,我是否可以通过仅更新已更改变量的项目来节省资源?如果是这样,请分享如何,因为我不确定如何检测更新功能之外的具体更改。
答案 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 OptionMenu
或Checkbutton
中,则可以使用其trace()
方法。
trace()
基本上在读取或写入变量时对其进行监视。
trace()
方法采用两个参数-mode
和function callback
。
trace(mode, callback)
这是它的用法-
def callback(*args):
print("variable changed!")
var = StringVar()
var.trace("w", callback)
var.set("hello")
答案 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()