我正在尝试从文本文件中读取并将其打印到我的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 :(得分: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
语句可确保文件在读完后关闭。
答案 1 :(得分:-1)
这不是设置为循环,但如果您想使用文本或列表框,它会为您提供在重新读取文本文档之前删除字段的选项。
导入tkinter
导入时间
根= tkinter.Tk()
root.title(“这是我的应用”)
lbox = Listbox(root,font ='Helvetica -12')
lbox.pack()
open_file = open('c:\ users \ owner \ desktop \ digits.txt')
lbox.delete(0,END)#Clears listbox
lbox.insert(END,open_file.readlines())#reads and insert text
root.mainloop()