【发布时间】:2022-06-29 21:00:21
【问题描述】:
我正在处理一个项目,并尝试通过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 的新手,对这条线的目的没有很好的把握。在这种情况下我需要明确分配一个插槽吗?我发现在某些特定情况下(function of pyqtSlot)可能有必要这样做,并且被认为是一种很好的做法,但在这种情况下它似乎产生了我不想要的效果。感谢您传递的任何建议/知识。谢谢。
【问题讨论】: