无限循环读取文本文件
我想从文本文件读取并将其打印到我的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的进口*
根= 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()
这不回答被问到的问题。 –
如果你想读每五秒钟一个文件,首先创建一个将再次读取该文件的功能。一旦你有了,你可以编写另一个函数,每五秒调用一次该函数。
例如:
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
声明保证了文件被关闭,调整完毕后阅读它。
您应该使用多线程或'root.after()'。 – DyZ
不要在tkinter程序中使用time.sleep。使用root.after。通过搜索'[tkinter] root找到多个示例。after'。 –