PYQT5 - 插槽函数不采用默认参数 [重复]
Posted
技术标签:
【中文标题】PYQT5 - 插槽函数不采用默认参数 [重复]【英文标题】:PYQT5 - Slot function does not take default argument [duplicate] 【发布时间】:2020-05-16 23:41:21 【问题描述】:我正在开发一个 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
谁能解释一下为什么不考虑默认参数?
谢谢!
【问题讨论】:
相关:***.com/questions/59970871/… 【参考方案1】:QPushButton 的clicked
信号,与任何从 QAbstractButton 继承的类一样,有一个 checked
参数,表示按钮的当前检查(“按下”)状态。
该信号在按钮被激活时发出(即,当鼠标光标在按钮内时按下然后释放)
按钮释放时发出点击信号;此时,按钮未被按下,信号参数将为False
。
有两种方法可以避免这种情况:
将信号连接到 lambda:
self.button.clicked.connect(lambda: self.doSomething())
在函数中添加一个 pyqtSlot 装饰器,没有签名作为参数:
@QtCore.pyqtSlot()
def doSomething(self, boolVariable = True):
print(boolVariable)
【讨论】:
好的,谢谢。因此,如果我理解正确,checked 参数会静默传递给我的 doSomething() 函数,该函数将其解释为第二个参数(boolVariable)? @Mat4444 确切地说,每个信号参数都被视为位置“可选”参数。这可能看起来很奇怪,因为如果你不向 doSomething 函数添加任何参数,它无论如何都会在没有任何警告的情况下工作,而如果你用一些参数手动调用它,它会抛出超出参数的异常,但 Qt 能够连接到参数少于信号提供的参数的函数,所以如果信号有三个参数并且函数只接受一个位置参数,它无论如何都会工作。以上是关于PYQT5 - 插槽函数不采用默认参数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章