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

Python 2.7 Tkinter在感应时挂起(在for循环中),python-2.7,tkinter,raspberry-pi,proximitysensor,Python 2.7,Tkinter,Raspberry Pi,Proximitysensor,上面的代码片段是针对我使用“Tkinter”制作的GUI,它有两个按钮(在上执行,系统:Raspberry Pi;操作系统:Fedora)。一个是让传感器运行,第二个是检测物体是否存在。当传感器(低电平有效)感测到一个物体超过20米时(按下第二个按钮后),将执行abc()(这是一个与列表x相关的计算)。 “没有GUI部分的代码工作得很好”,但在引入GUI时挂起! 有人能指出这段代码中的任何潜在错误吗? 我看了这里发布的几个问题,做了一些修改来检查完整代码的哪一部分使GUI挂起,并将其缩小到这一部

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

您有两个不断运行的循环(但我不认为第一个循环是不必要的,因为您从未中断过第二个循环)和调用
time.sleep
。如果在Tkinter线程上运行此代码,GUI将无响应,因为该线程“忙”,不断执行此循环

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

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()