目前,我的代码是这样的:
for control in self.controls():
self.connect(control, SIGNAL('clicked()'), lambda: self.button(control.objectName()))
当我运行我的代码时,我的lambda
函数将control
作为元素列表中的 last 元素,这不是我期望发生的。< / p>
奇怪的是,当我手动运行lambda
每个循环时,它适用于每个循环,但它仍然有与以前相同的问题:
for control in self.controls():
func = lambda: self.button(control.objectName())
func() # Prints the correct output
self.connect(control, SIGNAL('clicked()'), func) # When triggered, still breaks
我的self.button()
函数很简单:
def button(self, name):
print name
我通过打印control
和func
的输出检查了每个循环id(control)
和id(func)
的唯一性,并且它们都返回了唯一的数字。除此之外,control.objectName()
是正确的对象名称。
我觉得这是一个可变范围问题,因为我通常不会在代码中经常使用lambda
。有没有人看到任何明显的错误?
答案 0 :(得分:2)
for control in self.controls():
self.connect(control, SIGNAL('clicked()'), lambda control=control:
self.button(control.objectName()))