[英]Passing check state with QtPushButton.clicked signal
我正在开发一个项目,并尝试通过button.clicked.connect(self.button_checked)
将可检查按钮的选中状态传递给函数并遇到问题。 如果我在可调用之前使用“装饰” @QtCore.pyqtSlot()
,那么检查状态将不会通过。 但是,如果我移除装饰,该功能将按预期工作并在文档中编写。 两种情况见下面的代码:
带装饰
...
btn = QPushButton("Push")
btn.setCheckable(True)
btn.toggled.connect(self.button_checked)
...
@QtCore.pyqtSlot()
def button_checked(self, checked):
print("checked", checked)
...
我收到错误TypeError: button_checked() missing 1 required positional argument: 'checked'
按下按钮时。 但是当我删除QtCore.pyqtSlot()
并且只有:
...
btn = QPushButton("Push")
btn.setCheckable(True)
btn.toggled.connect(self.button_checked)
...
def button_checked(self, checked):
print("checked", checked)
...
该按钮按预期工作,并根据选中状态打印checked True
或checked False
。
@QtCore.pyqtSlot()
有什么用? 我还是 QtPy 的新手,对这条线的目的没有很好的把握。 在这种情况下我需要明确分配一个插槽吗? 我发现在某些特定情况下( pyqtSlot 的功能)可能需要这样做,并且被认为是好的做法,但在这种情况下它似乎有我不想要的效果。
我收到错误 TypeError: button_checked() missing 1 required positional argument: 'checked'
那是因为您的插槽不接受任何参数。 将@QtCore.pyqtSlot()
更改为@QtCore.pyqtSlot(bool)
我的问题是 @QtCore.pyqtSlot() 有什么用?
它被 C++ Qt 所需的QMetaObjectSystem
用于执行运行时动态操作,例如调用具有正确签名的槽。 在这里阅读更多。 在 Python 的情况下,由于 Python 的动态特性,不需要它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.