Python 文本文件更改时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

第一次使用Tkinter,我尝试制作一个小部件,它显示文本文件中的文本,并在文件中的文本发生变化时更新小部件。我可以从一个文本文件中读取一个小部件,但当文本发生变化时,我似乎无法使它更新

下面是我现在使用的代码:

 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
函数中放置一个计数器来定义要读取和显示的变量。