Python 文本文件更改时Tkinter标签小部件不更新
第一次使用Tkinter,我尝试制作一个小部件,它显示文本文件中的文本,并在文件中的文本发生变化时更新小部件。我可以从一个文本文件中读取一个小部件,但当文本发生变化时,我似乎无法使它更新 下面是我现在使用的代码:Python 文本文件更改时Tkinter标签小部件不更新,python,tkinter,widget,Python,Tkinter,Widget,第一次使用Tkinter,我尝试制作一个小部件,它显示文本文件中的文本,并在文件中的文本发生变化时更新小部件。我可以从一个文本文件中读取一个小部件,但当文本发生变化时,我似乎无法使它更新 下面是我现在使用的代码: from Tkinter import * root = Tk() root.minsize(740,400) file = open("file location") eins = StringVar() data1 = Label(root, textvariable
from Tkinter import *
root = Tk()
root.minsize(740,400)
file = open("file location")
eins = StringVar()
data1 = Label(root, textvariable=eins)
data1.config(font=('times', 37))
data1.pack()
eins.set(file.readline())
root.mainloop()
我搜索了更新小部件的帮助,但我只能在按下按钮或使用输入小部件时找到更新帮助。我曾想过使用一个每分钟都会循环的循环,但这不就是继续创建新的小部件吗 所以在您的示例中,您只从文件中读取一次。正如您所建议的,您需要添加某种循环,使您能够经常重新读取文件。Tkinter中普通循环的问题是它们在主线程中运行,使GUI没有响应。要解决此问题,请使用Tkinter的
after
方法
after
方法将函数调度为在N毫秒后运行。例如:
from Tkinter import *
# This function will be run every N milliseconds
def get_text(root,val,name):
# try to open the file and set the value of val to its contents
try:
with open(name,"r") as f:
val.set(f.read())
except IOError as e:
print e
else:
# schedule the function to be run again after 1000 milliseconds
root.after(1000,lambda:get_text(root,val,name))
root = Tk()
root.minsize(740,400)
eins = StringVar()
data1 = Label(root, textvariable=eins)
data1.config(font=('times', 37))
data1.pack()
get_text(root,eins,"test.txt")
root.mainloop()
这将一直循环,直到GUI关闭。感谢您的快速回复,这非常有效。我在考虑在文本文件中有三个不同的文本变量,并想知道Tkinter是否有办法在N毫秒内显示一个变量,然后再显示另一个变量,以此类推?这将涉及在
get_text
函数中放置一个计数器来定义要读取和显示的变量。