1
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,它有几个按钮(执行于,系统:Raspberry Pi;操作系统:Fedora)。一是让传感器运行,二是感应是否存在物体。当传感器(低电平有效)检测到一个物体超过 20 米(按下第二个按钮后)时,它会执行 abc()(这是与列表 x 相关的计算)。“没有 GUI 部分的代码工作得很好”但是在引入 GUI 时挂起!有人可以指出这段代码中的任何潜在错误吗?我经历了这里发布的一些问题并进行了一些更改以检查完整代码的哪一部分导致 GUI 挂起,并将其缩小到这部分

4

1 回答 1

0

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

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

于 2013-07-20T11:40:23.090 回答