【发布时间】:2016-04-13 19:18:10
【问题描述】:
我在着色窗口中创建了以下按钮:
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”功能为真时启用按钮,否则禁用它。但是,它似乎不起作用,因为即使绘制功能变为真,它也没有被启用。我在这里做错了什么?任何帮助深表感谢! :)
【问题讨论】:
-
每次更改
draw.drawing时都必须更改state -
它不起作用,因为这不是任何类型的侦听器,而只是静态代码,所以唯一一次检查它是在代码第一次执行时。对 draw.drawing 的任何后续更改都不会影响按钮。
-
@furas 谢谢。现在可以使用了。
-
@R.Kap 每次更改变量时更改状态是一个可行的选择,但可能不是一个好习惯。我会考虑使用像观察者模式这样的常见模式。
-
因为您使用这种方式越多,它就会变得越重,便携性越差。观察者模式(或类似的模式)是此类问题的统一解决方案,也可以在程序的其他部分使用,而无需多次执行。在小脚本中手动执行它并没有错,但是如果您正在编写更大的软件,那么好的设计就变得不可避免。我只想至少提一次,因为我觉得至少应该告知您有可能(但不是那么容易)的其他解决方案。
标签: python python-3.x button tkinter tkinter-canvas