Python,Tkinter-使get()动态

Python,Tkinter-使get()动态,python,tkinter,Python,Tkinter,下面是我正在测试的一些代码。在这段代码中,我能够创建一个窗口,顶部有一个标签,底部有一个输入字段。当我输入该输入字段时,我可以动态更改标签中的内容。现在,我已经包含了一个函数,它试图通过存储条目小部件中预定义的内容来计算分配给“tex”的变量。这就是“猫”。这是由以下人员负责的: tex = e.get() 我知道get()不会随着我在entry小部件中更改文本而动态更改。因此,当我在条目小部件中更改字符串时,它不能更改为“dog”。这可能吗?代码如下: from Tkinter import

下面是我正在测试的一些代码。在这段代码中,我能够创建一个窗口,顶部有一个标签,底部有一个输入字段。当我输入该输入字段时,我可以动态更改标签中的内容。现在,我已经包含了一个函数,它试图通过存储条目小部件中预定义的内容来计算分配给“tex”的变量。这就是“猫”。这是由以下人员负责的:

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()
(注意后面的
()
)我看不出您想要实现什么。StringVar
v
是在条目内容更改时动态更改的,那么为什么还需要另一个动态更改的变量呢?我并不是什么都不想做。这或多或少只是一种锻炼。我试图看看,一旦我影响字符串“cat”,是否有可能影响输入字符串,从而触发条件循环,以更改标签小部件“动态”。换句话说,我希望当我开始退格并从cat中删除“t”时,条目和小部件会立即更改。@Byran Oakley-无论StringVar末尾是否有(),程序仍然可以运行,这已经够奇怪了。但我很感激你帮我注意到这一点。我将更新代码,以反映正确的格式。它在没有
()
的情况下工作,只是在意外情况下作为其实现方式的副作用。如果您有两个这样创建的StringVar,它们将共享相同的数据。感谢您的帮助!