【发布时间】:2014-05-02 13:53:41
【问题描述】:
给定信号,我如何确定特定信号连接到的插槽?
我熟悉如何连接信号和插槽,这更多是出于调试目的。
我正在使用 pyqt5,python 2.7
【问题讨论】:
标签: python debugging pyqt pyqt5 signals-slots
给定信号,我如何确定特定信号连接到的插槽?
我熟悉如何连接信号和插槽,这更多是出于调试目的。
我正在使用 pyqt5,python 2.7
【问题讨论】:
标签: python debugging pyqt pyqt5 signals-slots
没有“the”槽之类的东西,因为一个信号可以连接到多个槽,或多个其他信号,或同一信号/槽多次。但无论如何,没有内置的 API 可以列出所有当前的连接。
您可以获得一个信号的当前连接的计数,如下所示:
count = button.receivers(button.clicked)
还有connectNotify 和disconnectNotify - 但这并不能让您走得更远,因为重新实现这些方法只会告诉您哪些信号已为对象连接或断开。
QtTest 模块有QSignalSpy(仅在 PyQt5 中可用),它可以记录给定信号的所有发射。但是,同样,这只会给你发送的参数,而不是它们被发送到的地方。
我想 Qt 不为此提供 API 的原因是连接项的列表可能非常不稳定。
PS:
我忘了提到dumpObjectInfo,它显然可以满足您的要求,但只能与 Qt 的调试版本一起使用 - 对于发布版本,它什么也不做。
【讨论】:
没有可靠的方法:查看Determine signals connected to a given slot in Qt 的接受答案以及 Kuba 在该页面上的最新答案。结论是您最好说明您要解决的问题,也许其他人会有不涉及确定连接的解决方案。
【讨论】:
QObject.connect(即 PyQt5 仅支持新式语法)。对于 PyQt,需要某种方式来挂钩 pyqtBoundSignal 连接到插槽的机制。这对于自定义信号可能是可能的,但是所有内置信号呢?我看不到路……