使用 tkinter 创建一个包含按钮矩阵的非常简单的窗口时,我遇到了以下问题:单击其中一个按钮时,事件处理程序使用按钮小部件上的配置方法更改该按钮的文本。这行得通。但我也想更改其他按钮之一中的文本,这不起作用。我使用的方法是在创建按钮时,在使用网格几何管理器放置它之前存储 Button 方法返回的对象。该对象在打印时看起来像“.123456789L”,并且似乎是指向小部件的指针。我还使用配置来更改按钮文本。但不知何故,它似乎是错误的,因为它有时有效,而大多数时候无效。不幸的是没有错误消息,调用配置时没有任何反应。我检查了一下,它似乎是指向小部件的正确指针。我是否必须使用一种特殊的方式来影响调用事件处理程序的小部件?这些是代码的相关部分:
# CREATING THE BUTTONS:
buttons={} # global
for i in range(3):
for j in range(3):
button = Tkinter.Button(self,text='foo')
buttons[button]=(i,j)
button.grid(column=j,row=i)
button.bind( "<Button-1>", self.OnButtonClick )
# CHANGING BUTTONS:
def find_button(i,j):
"""Return the pointer to the other button to be changed when a button has been clicked."""
for button,key in buttons.items():
if key==(i,j): return button
def OnButtonClick(self,event):
print "You clicked the button",buttons[event.widget]
i,j=buttons[event.widget]
old_button=find_button(i,j) # This is simplified, I don't actually pass i,j, but other values. But I checked this and it returns the reference to the correct button. But this simplified version works the same way, just assume a different button that the one pressed would be returned.
old_button.configure(text = 'blabla') # THIS DOES NOT WORK
event.widget.configure(text = 'something') # THIS WORKS