更新线程tkinter gui

时间:2016-10-18 14:26:01

标签: python multithreading user-interface tkinter gpio

我有一个小显示器连接到我的pi。 现在我有一个Python脚本来测量gpio头的两个事件之间的时间。 我想显示这个时间(获得这个时间的脚本工作得很好)。为此,我创建了一个tkinter窗口。 在那里,我有一个标签,应该显示这一次。 我已经使用了gui函数,使程序仍然可以监听GPIO引脚。

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)

我做错了什么?

1 个答案:

答案 0 :(得分: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调用。