我正在PYQT5接口上工作,使用QPushButton应该调用插槽函数,该函数具有默认参数。
self.button = QtWidgets.QPushButton("Button")
self.button.clicked.connect(self.doSomething)
def doSomething(self, boolVariable = True):
print(boolVariable)
运行doSomething函数的结果:
[in] object_instance.doSomething()
--> True
但是如果我单击按钮,则会得到以下结果:
--> False
有人可以解释一下为什么不考虑默认参数吗?
谢谢 !
与clicked
从QAbstractButton继承的任何类一样,QPushButton 的信号也具有一个checked
参数,该参数表示按钮的当前检查(“按下”)状态。
当激活按钮时(即,当鼠标光标位于按钮内部时,按下然后释放)该信号被发射
释放按钮时,按钮会发出喀哒声。此时,未按下按钮,信号参数为False
。
有两种方法可以避免这种情况:
将信号连接到lambda:
self.button.clicked.connect(lambda: self.doSomething())
在函数中添加pyqtSlot装饰器,不使用签名作为参数:
@QtCore.pyqtSlot()
def doSomething(self, boolVariable = True):
print(boolVariable)
好的谢谢。因此,如果我理解正确,那么选中的参数将以静默方式传递给我的doSomething()函数,该函数将其解释为第二个参数(boolVariable)?
@ Mat4444,并且每个信号参数都被视为位置“可选”参数。这看起来很奇怪,因为如果您不向doSomething函数添加任何参数,则无论如何它都将在没有任何警告的情况下正常工作,而如果您使用某些参数手动调用它,则会抛出超出参数的异常,但是Qt能够连接到参数少于信号提供的参数的函数,因此,如果信号具有三个参数,并且该函数仅接受一个位置参数,则该参数仍然可以工作。