无限循环读取文本文件

时间:2017-03-16 00:31:45

标签: python tkinter while-loop text-files

我正在尝试从文本文件中读取并将其打印到我的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))

2 个答案:

答案 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 import *

根= 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()