41

I'm trying to make a button like a switch, so if I click the disable button it will disable the "Button" (that works). And if I press it again, it will enable it again.

I tried things like if, else but didn't get it to work. Here's an example:

from tkinter import *
fenster = Tk()
fenster.title("Window")

def switch():
    b1["state"] = DISABLED

#--Buttons
b1=Button(fenster, text="Button")
b1.config(height = 5, width = 7)
b1.grid(row=0, column=0)    

b2 = Button(text="disable", command=switch)
b2.grid(row=0,column=1)

fenster.mainloop()

3 Answers 3

67

A Tkinter Button has three states : active, normal, disabled.

You set the state option to disabled to gray out the button and make it unresponsive. It has the value active when the mouse is over it and the default is normal.

Using this you can check for the state of the button and take the required action. Here is the working code.

from tkinter import *

fenster = Tk()
fenster.title("Window")

def switch():
    if b1["state"] == "normal":
        b1["state"] = "disabled"
        b2["text"] = "enable"
    else:
        b1["state"] = "normal"
        b2["text"] = "disable"

#--Buttons
b1 = Button(fenster, text="Button", height=5, width=7)
b1.grid(row=0, column=0)    

b2 = Button(text="disable", command=switch)
b2.grid(row=0, column=1)

fenster.mainloop()
Sign up to request clarification or add additional context in comments.

Comments

12

The problem is in your switch function.

def switch():
    b1["state"] = DISABLED

When you click the button, switch is being called each time. For a toggle behaviour, you need to tell it to switch back to the NORMAL state.

def switch():
    if b1["state"] == NORMAL:
        b1["state"] = DISABLED
    else:
        b1["state"] = NORMAL

Comments

1

You can also configure the states of the button as mentioned below:

self.true_button.config(state=DISABLED)
self.false_button.config(state=DISABLED)

so similarly in your program:

from tkinter import *
fenster = Tk()
fenster.title("Window")

def switch():
    b1.config(state=DISABLED)

#--Buttons
b1=Button(fenster, text="Button")
b1.config(height = 5, width = 7)
b1.grid(row=0, column=0)    

b2 = Button(text="disable", command=switch)
b2.grid(row=0,column=1)

fenster.mainloop()

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.