如果我们在一个只有一个公共事件处理程序的程序中声明了一个按钮对象列表,那么我们如何确定哪个特定按钮正在调用该处理程序?
我的代码如下:
self.bttn = []
for i in range(0, 10, 1):
self.bttn.append(Button(self,
text = str(i),
command = self.callback).grid(row = 4, column = i + 1, sticky = E))
答案 0 :(得分:0)
我喜欢将参数传递给按钮独有的回调。在这种情况下,您可以使用按钮的索引。 (尽管你必须小心地通过在lambda中的默认参数中使用它来调用“早期绑定”行为;否则i
将始终具有i
包含的最后一个值,而不是创建按钮时的值。)
for i in range(0, 10, 1):
self.bttn.append(
Button(
self,
text = str(i),
command = lambda i=i: self.callback(i)
).grid(row = 4, column = i + 1, sticky = E)
)
#later on in the class...
def callback(self, idx):
print "button #{} was clicked".format(idx)
顺便说一下,您的self.bttn
列表只会包含None
个值,因为None
是Button.grid()
的结果。如果您希望self.bttn
包含按钮,则必须创建按钮,将其添加到列表中,然后单独对其进行网格化。
for i in range(0, 10, 1):
b = Button(
self,
text = str(i),
command = lambda i=i: self.callback(i)
)
b.grid(row = 4, column = i + 1, sticky = E)
self.bttn.append(b)