Tkinter按钮状态

时间:2018-07-10 10:10:38

标签: python button tkinter

我正在编写一个程序,该程序可以打开一系列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)

上面的代码是按钮的代码。

1 个答案:

答案 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块太宽并且需要例外,而且我认为也没有必要。