【发布时间】:2017-01-26 14:12:12
【问题描述】:
下面是我正在测试的一些代码。在这段代码中,我可以创建一个窗口并在顶部有一个标签,在底部有一个条目字段。当我输入该输入字段时,我可以动态更改标签中的内容。现在,我包含了一个函数,该函数试图通过存储 Entry 小部件中预定义的内容来评估分配给“tex”的变量。这是“猫”。这是由以下人员收集的:
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()
任何帮助将不胜感激。
【问题讨论】:
-
您创建的
StringVar不正确。它必须是v = StringVar()(注意尾随()) -
我看不出你想要达到什么目的。 StringVar
v在这里是在 Entry 内容发生变化时动态变化的,那为什么还需要另一个动态变化的变量呢? -
我不想一事无成。这只是一个练习,或多或少。我正在尝试查看是否有可能在我影响字符串“cat”后影响输入字符串以触发条件循环以“即时”更改标签小部件。换句话说,我希望当我开始退格并从 cat 中删除“t”时,条目和小部件会立即更改。
-
@Byran Oakley - 在 StringVar 的末尾有或没有 (),程序仍然可以工作,很奇怪。但我感谢你为我注意到这一点。我将更新代码以反映正确的格式。
-
它在没有
()的情况下工作,只是偶然作为其实施方式的副作用。如果您以这种方式创建了两个字符串变量,它们将共享相同的数据。