以下是我正在测试的一些代码。在这段代码中,我可以创建一个窗口,顶部有一个Label,底部有一个Entry字段。当我输入该输入字段时,我可以动态更改标签中的内容。现在,我已经包含了一个函数,它试图通过存储Entry小部件中预定义的内容来评估分配给" tex"的变量。这是" cat"。这可以通过以下方式获取:
tex = e.get()
我知道当我更改条目小部件中的文本时,get()不会动态更改。所以它不能改变为" dog"当我更改条目小部件中的字符串时。这可能吗?这是代码:
from Tkinter import *
import time
root = Tk()
def change():
if tex == ("cat"):
time.sleep(0.5)
pass
else:
time.sleep(0.5)
e.delete(0, END)
e.insert(0, "dog")
v = StringVar()
e = Entry(root, textvariable=v)
e.insert(0, "cat")
e.pack(side=BOTTOM)
tex = e.get() #When text is defined with get(), it does not change
#dynamically with the entry widget
l = Label(root, textvariable=v)
l.pack(side=TOP)
change()
root.mainloop()
任何帮助都将不胜感激。
答案 0 :(得分:3)
要回答您的具体问题,请注意,当条目小部件更改时,tex
无法神奇地保持更新。该功能正是textvariable
属性存在的原因 - 它使变量始终使用条目小部件中的值进行更新。如果您需要另一个变量中的数据,则必须调用.get()
方法。
话虽如此,您可以在变量上设置跟踪,或者在条目小部件上设置绑定,并让它调用代码,可以在条目小部件更改时将tex
更新为您想要的任何内容。
例如,以下代码显示了当条目窗口小部件中的值发生更改时如何调用callback
:
def callback(*args):
global tex
tex = e.get()
v.trace("w", callback)
有关传递给回调的参数的更多信息,请参阅What are the arguments to Tkinter variable trace method callbacks?
所有这一切,你的代码中都有一些严重的缺陷。首先,您正在错误地创建StringVar
。它必须是v = StringVar()
(请注意尾随()
)。
此外,您永远不应该在GUI程序的主线程中调用sleep
。如果要在经过一段时间后执行某些代码,请阅读after
方法。