、あなたはtime.timeではなくtime.sleepを使用することを検討して、アクションが発生したかを確認するチェックを使用することができます。これにより、すべてのイベント(GUIを含む)をブロックするtime.sleepの使用を避けることができます。
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を使用していない場合は、これが理にかなっています。個人的には、ブライアンのソリューションははるかにエレガントだと思います。特に、更新が必要かどうかを常に確認する必要はありません。
PIRセンサーがブロックしているものをチェックしていますか、それとも時間がかかりますか?または、数秒ごとにそれをポーリングすることは可能ですか? –
PIRがブロックしていません。アラームがトリガーされると、ブザーは2秒ごとに音を出します。したがって、ブザーをHIGHに設定してから2秒間スリープ状態にしてから、ブザーを再びLOWに設定する必要があります。 – Kev
私たちにいくつかのコードを教えてください – gipsy