0

tkinter を使用して RaspberryPi 上で実行され、LED の点灯などのさまざまなアクションを実行する GUI を作成しました。私が抱えている問題は、ルートを使用して LED のオンとオフを切り替えることです。time.sleep() を使用するかのようにスケジューリングした後、このスリープ中に GUI がフリーズします。これが私のコードです。以下では、time.sleep() を約 500 ミリ秒の遅延に置き換えたいと考えています。

def toggleLED(root,period=0):
    if (period <15) and (Status is "On"):
            GPIO.output(11, True)
            time.sleep(0.5) #Needs to be replaced as causing GUI to freeze
            GPIO.output(11, False)
            root.after(1000, lambda: toggleLED(root, period)) #schedule task every 1 second while condition is true
    elif (Status == "Off"):
            print("Lights have been switched off")
    else:
            GPIO.output(11, True)

ありがとう

これは1つの解決策ですが、非常に面倒です:

def toggleLED(root,period=0):
    global Flash
    while (period <30) and (Status is "On"):
            if (Flash is True):
                    GPIO.output(11, False)
                    Flash = False
                    break
            elif (Flash is False):
                    GPIO.output(11, True)
                    Flash = True
                    break
            else:
                    break
    if (period <30) and (Status == "On"):
            period +=1
            print(period)
            root.after(500, lambda: toggleLED(root, period))
    elif (Status == "Off"):
           print("Lights have been switched off")
    else:
           GPIO.output(11, True)
4

1 に答える 1