2016-10-18 7 views
0

私は自分のパイに接続された小さなディスプレイを持っています。 gpioヘッダーの2つのイベントの間の時間を測定するPythonスクリプトがあります。 私はこの時間を表示したい(この時間を得るためのスクリプトは完全に動作している)。そのために私はtkinterウィンドウを作成しました。 この時間を表示するラベルがあります。 私はプログラムがGPIOピンを聞くことを可能にするためにgui関数をスレッド化しました。私が間違っているのは何update threaded tkinter gui

global beattime 
beattime['text'] = str(time) 

:私はこれらの行を追加しているので

def guiFunc(): 
    gui = Tk() 
    gui.title("Test") 
    gui.geometry("500x200") 
    app = Frame(gui) 
    app.grid() 
    beattime = Label(app, text = "test") 
    beattime.grid() 
    gui.mainloop() 


gui_thread = threading.Thread(target = guiFunc) 
gui_thread.start() 


while True: 
    time.sleep(.01) 
    if (GPIO.input(3)): 
     time = trigger() #trigger is the function to trigger the 'stopwatch' 
     global beattime 
     beattime['text'] = str(time) 
     while GPIO.input(3): #'wait' for btn to release (is there a better way?) 
      print "btn_pressed" 

だからプログラムは何もしていないのですか?

答えて

0

使用tkinter.StringVar

# omitting lines 
global timevar 
timevar = StringVar() 
timevar.set("Test") 
beattime = Label(app, textvariable=timevar) 
# omitting lines 

#changing the text: 
while True: 
    time.sleep(.01) 
    if (GPIO.input(3)): 
     time = trigger() #trigger is the function to trigger the 'stopwatch' 
     timevar.set(str(time)) 
     root.update() #just in case 

     while GPIO.input(3): #'wait' for btn to release (is there a better way?) 
      print "btn_pressed" 

そして、あなたはあなたのメインスレッドでGUIを実行する必要があります。異なるスレッドからgui呼び出しを呼び出すことはお勧めしません。

+0

しかし、私はguiコマンドを呼び出すために別のスレッドを使用すべきではない場合、どうすればよいでしょうか? gui mainloopはすべてをブロックします。 – jukisu

+0

スレッド部分にタイマー部分を書きますが、そこから直接GUI関数を呼び出さないでください。その代わりに、キュー、ソケット、変数などを使用してください。その推奨事項です。 – Dashadower

+0

私は変数に新しい値を書き込むにはどうすればよいのですか?while True: 'ループは実行されません。 – jukisu