0

我目前正在学习 guizero,我很快就遇到了一个问题,即创建一个在单击时禁用按钮的功能。整个代码有点多,所以下面是适用于这种情况的代码。

buttons = ["button0", "button1"]
def disable(n):
    buttons[n].disable()

menu = Box(app, layout="grid", grid=[1,0])

button0 = PushButton(menu, command=lambda: disable(0), text="x", grid=[0,0])
button1 = PushButton(menu, command=lambda: disable(1), text="x", grid=[1,0])

不幸的是,此代码返回以下错误,很难弄清楚

Exception in Tkinter callback
Traceback (most recent call last):
  File "/Users/oliver/.conda/envs/py37/lib/python3.7/tkinter/__init__.py", line 1702, in __call__
    return self.func(*args)
  File "/Users/oliver/.conda/envs/py37/lib/python3.7/site-packages/guizero/PushButton.py", line 197, in _command_callback
    self._command()
  File "guizero_test.py", line 84, in <lambda>
    button0 = PushButton(menu, command=lambda: disable(0), text="0", grid=[0,0])
  File "guizero_text.py", line 14, in disable
    buttons[n].disable()
AttributeError: 'str' object has no attribute 'disable'

任何解决这个问题的帮助表示赞赏!

4

2 回答 2

0

你的列表只包含字符串,你不能.config()在字符串上执行,试试

buttons = [PushButton(menu, command=lambda: disable(0), text="x", grid=[0,0])]
buttons += (PushButton(menu, command=lambda: disable(1), text="x", grid=[1,0]))

创建按钮时,列表包含实际的按钮对象

于 2020-04-13T12:34:29.620 回答
0
def disable(n):
  buttons[n].disable()

disable() 这是它调用自己的方法方法 disable() 如果分配禁用属性,例如 button[n].config(state="disabled")

替换为第 14 行

button[n].config(state="disabled")
于 2019-12-15T04:19:25.757 回答