2016-10-18 137 views
0

我有一個小顯示器連接到我的pi。 現在我有一個Python腳本,用於測量兩個gpio頭部事件之間的時間間隔。 我想顯示這個時間(腳本得到這個時間是完美的)。爲此我創建了一個tkinter窗口。在那裏,我有一個應該顯示這個時間的標籤。 我已經編寫了gui函數,使程序仍然可以聽GPIO引腳。更新線程tkinter gui

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" 

所以程序沒有做任何事情,因爲我添加這些行:

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

我在做什麼錯?

回答

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主循環會阻止一切。 – jukisu

+0

在線程上寫入定時器部分,但不直接從它調用gui函數。相反,使用隊列,套接字,變量等。它只是一個建議。 – Dashadower

+0

我的意思是我應該如何向變量寫入新值是'while True:'循環沒有執行? – jukisu