Python 如何在特定条件下禁用/启用特定的tkinter按钮?

Python 如何在特定条件下禁用/启用特定的tkinter按钮?,python,python-3.x,button,tkinter,tkinter-canvas,Python,Python 3.x,Button,Tkinter,Tkinter Canvas,我在着色窗口中创建了以下按钮: resetall = Button(text = "Clear ALL", command = confirmation) resetall.pack(side = "left") 这个按钮“清除”用户使用Python turtle绘制的画布,但我希望在某些条件下启用这个按钮,例如某个函数是否正在运行。我试过这个: if draw.drawing == False: resetall.config(state = DISABLED) elif draw.d

我在着色窗口中创建了以下按钮:

resetall = Button(text = "Clear ALL", command = confirmation)
resetall.pack(side = "left")
这个按钮“清除”用户使用Python turtle绘制的画布,但我希望在某些条件下启用这个按钮,例如某个函数是否正在运行。我试过这个:

if draw.drawing == False:
   resetall.config(state = DISABLED)
elif draw.drawing == True:
   resetall.config(state = NORMAL)

要仅在“绘制”功能为真时启用按钮,否则禁用它。但是,它似乎不起作用,因为即使draw函数变为true,它也不会被启用。我做错了什么?非常感谢您的帮助!:)

twa是一个非常简单的修复方法。我所要做的就是将
resetall
a
global
变量,然后将
resetall.config(state=ACTIVE)
分配给
draw
使包含按钮的变量成为全局变量,然后可以使用
按钮名称.config(state=ACTIVE)更改按钮的状态
按钮\u name.config(状态=禁用)


记住-一旦按钮被禁用,如果您在同一功能中将按钮的状态更改为禁用,则无法激活该按钮。一旦禁用,您需要另一个功能来激活上一个按钮

您必须在任何时候更改
绘图时更改
状态
。绘图
不起作用,因为这不是任何类型的侦听器,而只是静态代码,因此它唯一被检查的时间是首次执行代码时。对draw.drawing的任何后续更改都不会影响按钮。@furas,谢谢。现在可以了。@R.Kap每次更改变量时都更改状态是一个可行的选项,但可能不是一个好的做法。我会考虑使用像Objul-Type这样的常见模式,因为它会变得越来越重,便携性也会越来越差。观察者模式(或类似模式)是此类问题的统一解决方案,也可用于程序的其他部分,而无需多次强制执行。在小脚本中手动执行并没有什么错,但如果您正在编写更大的软件,良好的设计将不可避免。我只想至少提一次,因为我觉得至少应该通知您,有一个可能的(但不是那么容易的)其他解决方案。