0

使用 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
4

1 回答 1

1

我有同样的问题,我用以下方法解决它:

buttons[button]=(i,j,button)

在函数 OnButtonClicK 中:

i,j,old_button=buttons[event.widget]

old_button.configure(text = 'blabla') # THIS DOES NOT WORK
于 2013-12-13T11:26:27.893 回答