如何确定pyqtBoundSignal的槽?

4 投票
2 回答
2417 浏览
提问于 2025-04-17 23:44

给定一个信号,我该如何确定这个信号连接到了哪个槽?

我知道怎么连接信号和槽,这个问题主要是为了调试。

我正在使用pyqt5和python 2.7。

2 个回答

0

没有很好的方法来做到这一点:可以看看这个问题的 被接受的 答案,链接是 在Qt中确定连接到给定槽的信号,还有Kuba在那页上给出的更新答案。总的来说,建议你直接说出你想解决的问题,也许其他人会提供一些不需要确定连接的解决方案。

8

其实没有所谓的“唯一”槽,因为一个信号可以连接到多个槽,也可以连接到多个其他信号,甚至同一个信号/槽可以连接多次。不过,无论如何,Qt并没有提供一个可以列出所有当前连接的内置功能。

你可以通过下面的方式获取某个信号当前连接的数量:

    count = button.receivers(button.clicked)

还有 connectNotifydisconnectNotify,但这也没什么太大帮助,因为重新实现这些方法只能告诉你哪个信号被连接或断开了。

QtTest模块里有一个 QSignalSpy(仅在PyQt5中可用),它可以记录某个信号的所有发射情况。但同样,它只能告诉你发送了什么参数,而不能告诉你这些参数发送到了哪里。

我想Qt之所以不提供这样的功能,是因为连接的项目列表可能会非常不稳定。

附言:

我忘了提到 dumpObjectInfo,它似乎可以满足你的需求,但只在Qt的调试版本中有效,对于发布版本,它什么也不做。

撰写回答