温馨提示:本文翻译自stackoverflow.com,查看原文请点击:python - PYQT5
pyqt pyqt5 python signals-slots slot

python - PYQT5

发布于 2020-03-28 23:37:51

我正在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

有人可以解释一下为什么不考虑默认参数吗?

谢谢 !

查看更多

查看更多

提问者
Mat4444
被浏览
31
musicamante 2020-01-31 22:22

clicked从QAbstractButton继承的任何类一样,QPushButton 信号也具有一个checked参数,参数表示按钮的当前检查(“按下”)状态。

当激活按钮时(即,当鼠标光标位于按钮内部时,按下然后释放)该信号被发射

释放按钮时,按钮会发出喀哒声。此时,未按下按钮,信号参数为False

有两种方法可以避免这种情况:

  1. 将信号连接到lambda:

    self.button.clicked.connect(lambda: self.doSomething())

  2. 在函数中添加pyqtSlot装饰器,不使用签名作为参数:

    @QtCore.pyqtSlot()
    def doSomething(self, boolVariable = True):
        print(boolVariable)