禁用/启用TKinter中的按钮

32

我想制作一个像开关一样的按钮,如果我点击“禁用”按钮,它将禁用“按钮”(这个功能可以正常工作)。再次点击该按钮,将重新启用它。

我尝试了if、else等方法,但没有让它起作用。以下是一个示例:

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个回答

59

Tkinter的Button有三种状态:active, normal, disabled

state选项设置为disabled可以使按钮变灰且不响应鼠标点击。当鼠标悬停在按钮上时,它的值为active,默认值为normal

通过这种方式,您可以检查按钮的状态并执行所需的操作。以下是可工作的代码示例。

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()

9
问题出在你的switch函数中。
def switch():
    b1["state"] = DISABLED

当您点击按钮时,每次都会调用switch。如果需要切换行为,则需要告诉它切换回NORMAL状态。

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

0
您还可以根据以下所述配置按钮的状态:
self.true_button.config(state=DISABLED)
self.false_button.config(state=DISABLED)

所以在你的程序中也是类似的:
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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接