2016-10-18 4 views
0

내 파이에 연결된 작은 디스플레이가 있습니다. gpio 헤더의 두 이벤트 사이의 시간을 측정하는 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