初学者程序员在这里,正在制作一个基本的GUI作为我在线跟踪的教程的一部分,但他们都没有说明如何使用代码其他部分的输出来更新文本框。
我在网站上尝试了多个其他答案,包括一个使用StringVar的答案,它让我无处可去,另一个使用装饰器,其余的似乎超出了我的深度。
这是我的代码:
import tkinter as tk
import time
#Creating Root
root = tk.Tk()
#GUI TEMPLATE
frame =tk.Frame(root,
height = 100,
width = 400)
frame.pack()
v = StringVar()
colour = ["red","blue","green","white","yellow"]
labels = range(5)
#change number to change how many labels
for i in range(5):
l= tk.Label(root,
text = colour[i],
bg = colour[i])
l.place(x = 10 +i*70, y = 10, width=60, height=25)
T1 = tk.Text(root, height=2, width=40)
words = "Don't name your files after module names!"
T1.insert(tk.END, textvariable=v)
T1.place(x = 10, y= 40)
S = tk.Scrollbar(root)
S.config(command=T1.yview)
S.place(x = 340, y=40)
T1.config(yscrollcommand=S.set)
root.mainloop()
v.set("Something Else!")
现在,它应该输出的是一行彩色标签,工作正常,还有一个带滚动条的文本框,它应该立即更新为“Something Else!”,这不能正常工作。
相反,我收到以下错误:
NameError:名称'StringVar'未定义
我知道这个错误意味着什么,只是我找到了一个适合我的解决方案,并且不需要博士学位才能理解。
我要求的是,如果有人能给我一个适用于此的解决方案,并希望能够解释它!
提前致谢。
修改 因此,在修复语法错误,然后找出我正在尝试做的事情不起作用之后,我该怎么做呢?
我可以使用标签吗?或者还有另一种更好的方法吗? 再次感谢!
答案 0 :(得分:1)
StringVar
应通过tk
:
v = tk.StringVar()
另一方面,tk.Text.insert
不会使用textvariable
参数,因此以下内容无效:
T1.insert(tk.END, textvariable=v)
# ^^^^^^^^^^^^??
来自docs:
与条目小部件不同,文本小部件不支持 “textvariable”配置选项
另请参阅How can I connect a StringVar to a Text widget in Python/Tkinter?,了解为何这不起作用。
答案 1 :(得分:0)
我正在尝试使用Tkinter学习线程,并且已经做了一些工作来在Python3的Tkinter文本框中插入和更新文本,这可能会有所帮助。
我发现通过删除文本我可以插入新文本。直到我删除现有文本插入要被忽略的文本的指令。
{ foo = input("Give me input: " )
self.T.delete("1.0", END) #Clear the text window so we can write.
self.T.insert(END,foo) #Write the new text.}