为GUI和按钮创建线程

时间:2017-05-05 19:36:26

标签: python multithreading time raspberry-pi sleep

我正在尝试在我的覆盆子pi上构建一个安全系统。我有9个按钮来输入代码。输入代码后,您可以按“arm”来布防系统。然后,功能检查PIR传感器是否移动。当检测到移动时,警报应该响起,我需要时间。睡眠。 所以我的实际问题是,随着时间的推移,我阻止程序暂停其时间,因此我无法在报警模式下撤防系统。

到目前为止,我的想法只是将所有内容都放入线程中。但到目前为止没有成功。 time.sleep还有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

如果您的问题只是寻找更好的方法来使用time.sleep,您可以考虑使用time.time而不是time.sleep,然后使用检查来查看应该发生的操作。这样可以避免使用time.sleep来阻止所有事件(包括你的GUI)。作为一个快速书面的例子来证明这个想法:

from time import time

millis = lambda: int(time() * 1000)

def updateAlarm(lastTime, beepRate, currentState):
    now = millis()
    if now > (lastTime + beepRate):
        return (not(currentState), now)
    return (currentState, now)


last = millis() #set the first time for the alarm
rate = 2000 # change state every two seconds
state = False # the alarm is currently off

while True: # just for demonstration purposes, while True: won't work inside of a tkinter GUI
    change = updateAlarm(last, rate, state)
    if change[0] != state: # if the state has changed, update it and print
        state = change[0]
        last = change[1]
        print(state)

根据您的实现,这可能更有意义,特别是如果您不使用tkinter。就个人而言,我认为Bryan的解决方案更加优雅,特别是因为它不需要不断检查警报以确定是否需要更新。