gpt4 book ai didi

python - 在 Tkinter 中单击后禁用按钮

转载 作者:行者123 更新时间:2023-11-28 16:40:01 26 4
gpt4 key购买 nike

我是 Python 的新手,我正在尝试使用 Tkinter 制作一个简单的应用程序。

def appear(x):
return lambda: results.insert(END, x)

letters=["A", "T", "D", "M", "E", "A", "S", "R", "M"]

for index in range(9):
n=letters[index]
nButton = Button(buttons, bg="White", text=n, width=5, height=1,
command =appear(n), relief=GROOVE).grid(padx=2, pady=2, row=index%3,
column=index/3)

我想要做的是在单击按钮后将其禁用。我试过了

def appear(x):
nButton.config(state="disabled")
return lambda: results.insert(END, x)

但它给了我以下错误:

NameError: global name 'nButton' is not defined

最佳答案

这里有几个问题:

  1. 无论何时动态创建小部件,都需要将对它们的引用存储在一个集合中,以便以后访问它们。

  2. Tkinter 小部件的grid 方法总是返回None。因此,您需要将对 grid 的任何调用放在它们自己的行上。

  3. 每当您将按钮的 command 选项分配给需要参数的函数时,您必须使用 lambda或类似的“隐藏”该函数的调用,直到单击按钮。有关详细信息,请参阅 https://stackoverflow.com/a/20556892/2555451 .

下面是解决所有这些问题的示例脚本:

from Tkinter import Tk, Button, GROOVE

root = Tk()

def appear(index, letter):
# This line would be where you insert the letter in the textbox
print letter

# Disable the button by index
buttons[index].config(state="disabled")

letters=["A", "T", "D", "M", "E", "A", "S", "R", "M"]

# A collection (list) to hold the references to the buttons created below
buttons = []

for index in range(9):
n=letters[index]

button = Button(root, bg="White", text=n, width=5, height=1, relief=GROOVE,
command=lambda index=index, n=n: appear(index, n))

# Add the button to the window
button.grid(padx=2, pady=2, row=index%3, column=index/3)

# Add a reference to the button to 'buttons'
buttons.append(button)

root.mainloop()

关于python - 在 Tkinter 中单击后禁用按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20596892/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com