python - QAction 触发信号未传递检查参数

标签 python qt pyqt pyside qt-signals

我制作了一个菜单栏,其中的 QAction 设置为可检查

self.display_features_action = QtGui.QAction("Show Features", parent)
self.display_features_action.setCheckable(True)
self.display_features_action.setChecked(True)

然后我连接到这个

class MyClass:
    def __init__(....)
         ....
         self.display_features_action.triggered.connect(self.my_slot)

    def my_slot(self, checked)
         ....

但是,当仅提供一个参数时,我收到 my_slot 方法传递给参数的运行时错误。为什么检查的参数没有与信号一起发送?

最佳答案

似乎 PySide 中对具有默认参数(例如 triggeredclicked)的信号的处理与 PyQt 中的不同。前者不允许接收槽中出现任何位置参数,但后者会很乐意地丢弃未使用的参数而不提示。

在 PySide 和 PyQt 中,具有默认参数的信号实际上有两个重载:一个不发送任何内容的“无操作”版本(或者,在 PyQt 中,始终发送 False),以及一个“事件”版本"version,发送当前选中状态。

“无操作”版本是默认版本,因此要获取“事件”版本,您必须显式选择它,如下所示:

    action.triggered[bool].connect(slot)

至于槽签名:在 PySide 中,最可靠的解决方案可能是这样的:

    def slot(self, checked=False):

关于python - QAction 触发信号未传递检查参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28318281/

相关文章:

qt - QLabel 在 QWidget 中不显示

python - QSplitter Handlebars

python - 在 PyQt 中编译着色器

qt - QFileSystemModel 和 QTreeView 仅显示目录。如何在空目录中隐藏扩展标记?

python - PyQt QTableView 设置水平和垂直标题标签

python - Scrapy:列表和分页迭代失败

Python 安装编译错误

python - 使用 Celery 和 Amazon SES 在 Django 中安排电子邮件

python - 使用 Python 从文本文件中读取特定的列值

qt - 在 Qt 中旋转图像