Python Tkinter通过函数更新文本框内容

时间:2016-11-24 09:18:17

标签: python tkinter

初学者程序员在这里,正在制作一个基本的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'未定义

我知道这个错误意味着什么,只是我找到了一个适合我的解决方案,并且不需要博士学位才​​能理解。

我要求的是,如果有人能给我一个适用于此的解决方案,并希望能够解释它!

提前致谢。

修改 因此,在修复语法错误,然后找出我正在尝试做的事情不起作用之后,我该怎么做呢?

我可以使用标签吗?或者还有另一种更好的方法吗? 再次感谢!

2 个答案:

答案 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.}