Python 无限循环读取文本文件

Python 无限循环读取文本文件,python,tkinter,while-loop,text-files,Python,Tkinter,While Loop,Text Files,我正在尝试从文本文件中读取数据并将其打印到GUI中。从外部源每隔5秒更新一次文本文件。我想读取此文件(一行4个数字)并更新(覆盖)文本小部件中的上一个条目。我已经找了几个小时了,似乎找不到可行的解决办法。基本上,按下一个按钮,启动一个无限循环来读取文本文件中的数据,在我的GUI中的文本小部件中显示该数据,并每5秒钟重复一次,用新数据覆盖小部件中的旧数据。 以下是我迄今为止的代码片段: from tkinter import* root=Tk() import tkinter as Tk impo

我正在尝试从文本文件中读取数据并将其打印到GUI中。从外部源每隔5秒更新一次文本文件。我想读取此文件(一行4个数字)并更新(覆盖)文本小部件中的上一个条目。我已经找了几个小时了,似乎找不到可行的解决办法。基本上,按下一个按钮,启动一个无限循环来读取文本文件中的数据,在我的GUI中的文本小部件中显示该数据,并每5秒钟重复一次,用新数据覆盖小部件中的旧数据。 以下是我迄今为止的代码片段:

from tkinter import*
root=Tk()
import tkinter as Tk
import os
import time
starttime=time.time()
def exitProgram():
    print('I will now exit')
    root.destroy()
def runScript():
    print('I ran something')
    f = open("months.txt")
    two=Label(root, text=f.readlines(),bg='white',fg='blue')
    two.pack(side=TOP, fill=BOTH)
    two.config(font=("Courier",150))
    #time.sleep(5.0-((time.time()-starttime)%5.0))

这并没有设置为循环,但是如果您想使用文本或列表框,它会为您提供在重新读取文本文档之前删除字段的选项

进口tkinter

导入时间

从tkinter进口*

root=tkinter.Tk()

root.title(“这是我的应用程序”)

lbox=Listbox(根,font='Helvetica-12')

lbox.pack()

open\u file=open('c:\users\owner\desktop\digits.txt')

lbox.delete(0,结束)#清除列表框

lbox.insert(END,open_file.readlines())#读取和插入文本


root.mainloop()。一旦你有了它,你就可以编写另一个函数,每五秒钟调用一次这个函数

例如:

def run_periodically():
    runScript()
    root.after(5000, run_periodically)
在启动时调用此函数一次,它将调用
runScript
。然后,它将在五秒钟内调用自己,使其调用
runScript
,并在五秒钟内再次调用自己。这将在程序的生命周期内运行

我想。。。更新(覆盖)文本小部件中的上一个条目

我没有看到文本小部件,所以我不能完全确定您想要做什么。假设您指的是
标签
小部件,则只需创建一次标签小部件,然后使用
配置
方法更改值:

two=Label(root, text="", bg='white', fg='blue')
two.config(font=("Courier",150))
two.pack(side=TOP, fill=BOTH)

def runScript():
    print('I ran something')
    with open("months.txt") as f:
        data = f.read()
    two.configure(text=data)

注意:使用
with
语句可以保证文件在您完成读取后关闭。

您应该使用多线程或
root.after()
。不要在tkinter程序中使用time.sleep。使用root.after。通过搜索
[tkinter]根查找多个示例。
之后。这并不能回答所问的问题。当我说“文本小部件”时,我的意思是我正在使用标签并显示“文本”。我的“文本”=readlines.终于有机会坐下来仔细检查你说要做的事情了。太棒了!!非常感谢你!