2017-03-16 124 views
0

我想從文本文件讀取並將其打印到我的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'。 –

回答

-1

這不是設置爲一個循環,但如果你想使用文本或列表框它會給你的選項重新讀取之前刪除場文本文件。

進口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

這不回答被問到的問題。 –

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