无限循环读取文本文件

问题描述:

我想从文本文件读取并将其打印到我的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)) 
+0

您应该使用多线程或'root.after()'。 – DyZ

+0

不要在tkinter程序中使用time.sleep。使用root.after。通过搜索'[tkinter] root找到多个示例。after'。 –

这不是设置为一个循环,但如果你想使用文本或列表框它会给你的选项重新读取之前删除场文本文件。

进口Tkinter的

导入时间

从Tkinter的进口*

根= tkinter.Tk()

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

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

lbox.pa CK()

OPEN_FILE =开放( 'C:\用户\所有者\桌面\ digits.txt')

lbox.delete(0,END)#Clears列表框

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

root.mainloop()

+0

这不回答被问到的问题。 –

如果你想读每五秒钟一个文件,首先创建一个将再次读取该文件的功能。一旦你有了,你可以编写另一个函数,每五秒调用一次该函数。

例如:

def run_periodically(): 
    runScript() 
    root.after(5000, run_periodically) 

您在启动时调用此函数一次,它会调用runScript。它会在五秒钟内自行呼叫,将导致它呼叫runScript并在五秒内再次呼叫自己。这会在你的程序的生命中运行。

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

我没有看到文本小部件,所以我不完全确定你想要做什么。假设你的意思是一个Label小部件,你只想一次创建标签控件,然后使用configure方法来更改值:

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声明保证了文件被关闭,调整完毕后阅读它。

+0

当我说“文本小部件”时,我的意思是我使用标签并显示“文本”。我的“文字”= readlines。 – SteMob

+0

终于有机会坐下来看看你说的话。太棒了!非常感谢! – SteMob