Python,Tkinter-使get()动态
下面是我正在测试的一些代码。在这段代码中,我能够创建一个窗口,顶部有一个标签,底部有一个输入字段。当我输入该输入字段时,我可以动态更改标签中的内容。现在,我已经包含了一个函数,它试图通过存储条目小部件中预定义的内容来计算分配给“tex”的变量。这就是“猫”。这是由以下人员负责的:Python,Tkinter-使get()动态,python,tkinter,Python,Tkinter,下面是我正在测试的一些代码。在这段代码中,我能够创建一个窗口,顶部有一个标签,底部有一个输入字段。当我输入该输入字段时,我可以动态更改标签中的内容。现在,我已经包含了一个函数,它试图通过存储条目小部件中预定义的内容来计算分配给“tex”的变量。这就是“猫”。这是由以下人员负责的: tex = e.get() 我知道get()不会随着我在entry小部件中更改文本而动态更改。因此,当我在条目小部件中更改字符串时,它不能更改为“dog”。这可能吗?代码如下: from Tkinter import
tex = e.get()
我知道get()不会随着我在entry小部件中更改文本而动态更改。因此,当我在条目小部件中更改字符串时,它不能更改为“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()
如果您有任何帮助,我们将不胜感激。要回答您的具体问题,不,
tex
无法在条目小部件更改时神奇地保持更新。这一特性正是textvariable
属性存在的原因——它使变量始终使用条目小部件中的值进行更新。如果需要另一个变量中的数据,则必须调用.get()
方法
也就是说,您可以在变量上设置一个跟踪,或者在条目小部件上设置一个绑定,并让它调用代码,当条目小部件更改时,可以将tex
更新为您想要的任何内容
例如,以下代码显示了如何在条目小部件中的值发生更改时调用回调
:
def callback(*args):
global tex
tex = e.get()
v.trace("w", callback)
有关传递给回调的参数的更多信息,请参阅
尽管如此,您的代码中仍存在一些关键缺陷。首先,您不正确地创建了StringVar
。它需要是v=StringVar()
(注意后面的()
)
此外,决不能在GUI程序的主线程中调用
sleep
。如果要在经过一段时间后执行某些代码,请阅读after
方法 您正在错误地创建StringVar
。它必须是v=StringVar()
(注意后面的()
)我看不出您想要实现什么。StringVarv
是在条目内容更改时动态更改的,那么为什么还需要另一个动态更改的变量呢?我并不是什么都不想做。这或多或少只是一种锻炼。我试图看看,一旦我影响字符串“cat”,是否有可能影响输入字符串,从而触发条件循环,以更改标签小部件“动态”。换句话说,我希望当我开始退格并从cat中删除“t”时,条目和小部件会立即更改。@Byran Oakley-无论StringVar末尾是否有(),程序仍然可以运行,这已经够奇怪了。但我很感激你帮我注意到这一点。我将更新代码,以反映正确的格式。它在没有()
的情况下工作,只是在意外情况下作为其实现方式的副作用。如果您有两个这样创建的StringVar,它们将共享相同的数据。感谢您的帮助!