<p>这里有几个问题:</p>
<ol start=“2”>
<li><p>无论何时动态创建小部件,都需要将对它们的引用存储在一个集合中,以便以后可以访问它们。</p></li>
<li><p>Tkinter小部件的<code>grid</code>方法总是返回<code>None</code>。所以,您需要在他们自己的线路上给<code>grid</code>打任何电话。</p></li>
<li><p>无论何时将按钮的<code>command</code>选项分配给需要参数的函数,都必须使用<a href="https://stackoverflow.com/questions/890128/python-lambda-why">^{<cd5>}</a>或类似的选项来“隐藏”该函数的调用,直到单击按钮。有关详细信息,请参见<a href="https://stackoverflow.com/a/20556892/2555451">https://stackoverflow.com/a/20556892/2555451</a>。</p></li>
</ol>
<p>下面是解决所有这些问题的示例脚本:</p>
<pre><code>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()
</code></pre>