【问题标题】:How to disable/enable a specific tkinter button under certain conditions?如何在某些条件下禁用/启用特定的 tkinter 按钮?
【发布时间】: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


【解决方案1】:

这是一个非常简单的修复。我所要做的就是将resetall 设为global 变量,然后将resetall.config(state = ACTIVE) 分配给draw

【讨论】:

    【解决方案2】:

    将包含按钮的变量设为全局变量,然后可以使用button_name.config(state=ACTIVE)button_name.config(state=DISABLED)更改按钮的状态。

    请记住 - 一旦按钮被禁用,如果您在同一功能内将按钮的状态更改为禁用,您将无法激活它。一旦禁用,您将需要另一个功能来激活您以前的按钮

    【讨论】:

      猜你喜欢
      • 2020-12-07
      • 2015-08-24
      • 1970-01-01
      • 2013-01-03
      • 1970-01-01
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      • 2019-02-25
      相关资源
      最近更新 更多