我正在编写一个程序,该程序可以打开一系列LED。执行代码后,它会打开一个具有一系列按钮的GUI。将Raspberry Pi连接到GPIO板时,先打开1个LED,然后关闭LED。
我正在尝试为按钮引入状态系统,以说明当按下按钮时会发生这种情况,再次按下时它会关闭。我试图在我的“ if语句”中实现某些东西,但是我不确定如何实际实现它。
例如,如果buttonPressed == true (以代码为主导)
buttonPressed(再次按下)
(关闭代码)
到目前为止,这是我的代码
b1 = Button(self, text ="io_1", command = self.send_signal)
b1.config(height = 1, width = 10)
b1.place(x =80, y = 150)
b2 = Button(self, text ="io_2", command = self.send_signal)
b2.config(height = 1, width = 10)
b2.place(x =160, y = 150)
这些是按钮。我已经完成了root = tk()之类的屏幕初始化。
def send_signal(self): #This is the function for the funtionality for the button
print("sending Signal")
try:
ledState = False
if ledState == False:
GPIO.output(LEDPin, True)
print("LED ON")
ledState = True
sleep(1)
elif ledState == True:
GPIO.output(LEDPin, False)
print("LED OFF")
ledState = False
sleep(0.5)
上面的代码是按钮的代码。
答案 0 :(得分:0)
这更多是一个通用的逻辑问题,因为它实际上适用于任何事物!
每次使用您提到的IF按下按钮时,都需要设置一个标志。如果该标志当前为false,则将其设置为true;否则,将其设置为true。如果为true,请将其设置为false。这是一个通用的解决方案。
from time import sleep
toggle_state = False
while True:
if toggle_state:
print("Currently True")
toggle_state = False
else:
print("Currently False")
toggle_state = True
sleep(1)
关于您的具体解决方案,我建议进行如下改动;
def send_signal(self): #This is the function for the funtionality for the button
print("sending Signal")
ledState = False
if ledState:
GPIO.output(LEDPin, False)
print("LED OFF")
ledState = False
else:
GPIO.output(LEDPin, True)
print("LED ON")
ledState = True
sleep(1)
旁注;
sleep
暂停整个程序,这将使GUI感觉已挂起。try
块太宽并且需要例外,而且我认为也没有必要。