我在 pyqt 中有一个带有以下按钮的 python 程序:
this=[1,k]
button.clicked.connect(lambda x=this:self.testFunction(str(x)))
当我按下按钮时,我得到了testFunction(False)
宁愿testFunction(str([1,k]))
。任何想法为什么?提前致谢。
原因是您误解了lambda
工作原理。Lambda 返回一个匿名函数,其中包含您给它的定义。通过说lambda x=this:
你是说如果对该函数的调用没有x
参数,则默认使用它。
观察:
l = lambda x=3: x*2
print l(10) # Prints 20
print l() # Prints 6
如果我们检查QPushButton.clicked()
(inherited from QAbstractButton)的文档,我们会看到它使用布尔参数触发。
所以在这一行:
button.clicked.connect(lambda x=this:self.testFunction(str(x)))
lambda 函数总是被传递一个参数,该参数是从传入的,QPushButton.clicked()
并且将是True
or False
。因此,this
从不使用默认值 of。作为替代方案,您可以使用:
button.clicked.connect(lambda x:self.testFunction(str(this)))
但这可能不是您想要的,因为它总是将数组 this 的字符串变体传递给函数。另一方面是:
button.clicked.connect(lambda x:self.testFunction(str(this[x])))
将传递他们的字符串转换1
ork
取决于传递的参数是True
or False
。