目前,我的代码是这样的:
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
我检查了的独特control
和func
每次循环通过打印输出id(control)
和id(func)
它们都返回唯一的编号。 除此之外, control.objectName()
是正确的对象名称。
我有一种感觉,这是一个变量的作用域问题,因为我通常不使用lambda
太经常在我的代码。 是否有人看到任何公然错误?