2016-04-07 51 views
1

自分で何も入力しなくても、情報を使ってラベルを更新する方法を見つけようとしています。入力なしで設定した時間間隔でtkinterラベルを更新する

書き込みしようとしているプログラムは、CPU温度をラズベリーパイから取り出してウィンドウに表示しています。私は5秒ごとに更新するために一時入力を行う必要がありますが、そうする試みはすべて失敗しました。 私はループ中にしようとしたが、彼らはtkinterの内部で動作しないことがわかりました。 私はPythonにはかなり新しいので、方法があると確信しています。ここでの同様の質問は、私に当てはまる答えには至りません。ここで

はコードの私のビットが今ある:

import subprocess 
from tkinter import * 

root = Tk() 
root.title('CPU Temp') 

cpuLab = Label(root, text = 'CPU Temp:', 
       font =('Nimbus Mono L',14,), 
       bg = 'black', fg = 'green').grid(row = 0, column = 0) 

cpuTemp = subprocess.check_output(['/opt/vc/bin/vcgencmd', 'measure_temp']) 

cpuVar = StringVar() 
cpuDisplay = Label(root, textvariable = cpuVar, 
        font =('Nimbus Mono L',14), 
        bg = 'black', fg = 'green').grid(row = 0, column = 1) 
cpuVar.set(cpuTemp[5:11]) 

root.mainloop() 

これは、温度を示すために完璧に動作しますが、それだけでリフレッシュするために再実行する必要があります。

答えて

3

Tkinterのルートウィンドウにはafterというメソッドがあり、一定時間後に関数を呼び出すようにスケジュールすることができます。これは、あなたのラベル秒ごとにリロードされます

def update_label(self): 
    self.label.configure(cpuTemp) 
    self.root.after(1000, self.update_label) 

:だから(あなたが最初のクラスを作成する必要があります)のように、その関数自身を呼び出します。

これはあなたを助けることがあります。クラスにGUIを置くCreating a Timer with tkinter

+2

は、厳密に必要な素敵な、しかしではありません。 –

+0

ああ、私はそれを知らなかった。 – frankenapps

+0

ありがとう!私は命名のために検索中に他のポストが見えなかったと思うが、あなたの答えと組み合わせると、それは私の質問に完全に答えるように見える。私はtkinterのドキュメントを見ているときに 'after'に気づいていませんでしたが、それは素晴らしいです、もう一度ありがとう! –

関連する問題