我制作了一个菜单栏,其中的 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 中对具有默认参数(例如 triggered
和 clicked
)的信号的处理与 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/