2017-03-16 21 views
0

テキストファイルから読み込み、GUIに出力しようとしています。テキストファイルは、外部ソースから5秒ごとに更新されています。私はこのファイル(4つの数字の1行)を読んで、テキストウィジェットの前の項目を更新(上書き)したいと思います。私は何時間も探していて、実行可能な解決策を見つけることができないようです。基本的には、ボタンを押し、無限ループを開始してテキストファイルからデータを読み込み、そのデータを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を使用してください。 SOに '[tkinter] rootを検索することによって、複数の例を見つけることができます。後に。 –

答えて

-1

は、これはループに設定されていないが、あなたはテキストやリストボックスを使用したい場合、それはあなたに再読み込みする前にフィールドを削除するためのオプションを与えるだろうテキスト文書

輸入のTkinter

インポート時のTkinterのインポートから

*

ルート= tkinter.Tk()

root.title( "これは私のアプリである")

lbox =リストボックス(ルート、フォント= 'Helvetica -12')

lbox.pa CK()

open_file =オープン( 'C:\ユーザー\所有者\デスクトップ\のdigits.txt')

lbox.delete(0、END)は、リストボックス

lbox.insert(ENDを#Clears 、open_file.readlines())#readsと挿入テキスト

root.mainloop()

+0

これは質問された質問には答えません。 –

0

あなたは5秒ごとにファイルを読み込みたい場合は、最初の一回のファイルを読み込みます関数を作成します。一度それを持っていると、5秒ごとにその関数を呼び出す別の関数を書くことができます。例えば

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

あなたは、起動時に一度、この関数を呼び出すと、それはrunScriptを呼び出します。その後、5秒後に自分自身を呼び出し、runScriptに電話をかけ、5秒後にもう一度自分自身を呼び出します。これはあなたのプログラムの寿命の間実行されます。

私は、テキストウィジェットの前のエントリを更新(上書き)したいと思います。

私はテキストウィジェットが表示されないので、何をしたいかについて完全にはわかりません。あなたが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

私が "テキストウィジェット"と言うとき、私はラベルを使用して "テキスト"を表示していることを意味しました。私の "text" = readlines。 – SteMob

+0

最後に座って、あなたが言うことを通過する機会がありました。素晴らしい作品!どうもありがとうございます! – SteMob

関連する問題