Tkinter在感应时挂起(在for循环中)

时间:2013-07-20 08:27:07

标签: python-2.7 tkinter raspberry-pi proximitysensor

while True:
    x = []

    while True:
        sense = 0
        for i in range(0,4):
            k = gpio.input(sensor)
            if k = 1:
                sense += 1
                time.sleep(.005)
        if sense == 0:
            x = abc()

上面的代码片段是用于我使用'Tkinter'制作的GUI,它有几个按钮(Executed on,System:Raspberry Pi; OS:Fedora)。一个是传感器运行,第二个是检测物体是否存在。当传感器(低电平有效)检测到一个物体超过20毫秒时(按下第二个按钮后),它将执行abc()(这是与列表x相关的计算)。 “没有GUI部分的代码工作得很好”但是在引入GUI时会挂起! 有人可以指出这段代码中的任何潜在错误吗? 我已经在这里发布了一些问题,并做了一些更改,以检查完整代码的哪一部分使GUI挂起,并将其缩小到这部分

1 个答案:

答案 0 :(得分:0)

你有两个循环不断运行(但我不认为第一个循环不是必需的,因为你永远不会破坏第二个循环)和对time.sleep的调用。如果在Tkinter线程上运行此代码,GUI将无响应,因为线程“忙”,不断执行此循环。

您可以在不同的线程上执行此操作并进行通信,甚至更好地重写它,以便您可以定期调用Tk.after(而不是time.sleep)来检索传感器的值,然后更新GUI的内容。