0
我已經使用tkinter創建了GUI,它將在RaspberryPi上運行並執行各種操作,例如照明LED。我遇到的問題是使用root.after打開和關閉指示燈,如同使用time.sleep()一樣,在此睡眠期間GUI將凍結。這是我的代碼,下面我想用某種延遲大約500ms替換time.sleep()。使用tkinter延遲的Python建議
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)
感謝
這是一個解決方案,但它似乎很凌亂:
問題的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)
你的溶液可以通過除去重複的代碼和不必要的塊進行清洗。但是,您想要達到的結果是什麼?將光線切換30次? – 2013-03-25 16:47:26
是的,燈光應在15秒內切換30次。 – user2207573 2013-03-25 18:57:37