目前,我的代码是这样的:
for control in self.controls():
self.connect(control, SIGNAL('clicked()'), lambda: self.button(control.objectName()))
当我运行我的代码时,我的lambda
函数将control
成为我的元素列表中的最后一个元素,这不是我期望发生的。
奇怪的是,当我手动运行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
我通过打印and的输出检查了control
andfunc
每个循环的唯一性,它们都返回了唯一的数字。除此之外,是正确的对象名称。id(control)
id(func)
control.objectName()
我有一种感觉,这是一个变量范围的问题,因为我通常不会lambda
在我的代码中经常使用 s。有没有人看到任何明显的错误?