【问题标题】:Given a pyqtBoundSignal how to determine the slot?给定一个 pyqtBoundSignal 如何确定插槽?
【发布时间】:2014-05-02 13:53:41
【问题描述】:

给定信号,我如何确定特定信号连接到的插槽?

我熟悉如何连接信号和插槽,这更多是出于调试目的。

我正在使用 pyqt5,python 2.7

【问题讨论】:

    标签: python debugging pyqt pyqt5 signals-slots


    【解决方案1】:

    没有“the”槽之类的东西,因为一个信号可以连接到多个槽,或多个其他信号,或同一信号/槽多次。但无论如何,没有内置的 API 可以列出所有当前的连接。

    您可以获得一个信号的当前连接的计数,如下所示:

        count = button.receivers(button.clicked)
    

    还有connectNotifydisconnectNotify - 但这并不能让您走得更远,因为重新实现这些方法只会告诉您哪些信号已为对象连接或断开。

    QtTest 模块有QSignalSpy(仅在 PyQt5 中可用),它可以记录给定信号的所有发射。但是,同样,这只会给你发送的参数,而不是它们被发送到的地方。

    我想 Qt 不为此提供 API 的原因是连接项的列表可能非常不稳定。

    PS:

    我忘了提到dumpObjectInfo,它显然可以满足您的要求,但只能与 Qt 的调试版本一起使用 - 对于发布版本,它什么也不做。

    【讨论】:

      【解决方案2】:

      没有可靠的方法:查看Determine signals connected to a given slot in Qt接受答案以及 Kuba 在该页面上的最新答案。结论是您最好说明您要解决的问题,也许其他人会有不涉及确定连接的解决方案。

      【讨论】:

      • 这个被接受的答案的主要问题(从这个问题的角度来看)是它只与 PyQt4 相关(即使那样,只有当你使用旧式语法时)。它根本无法与 PyQt5 一起使用,因为没有 QObject.connect(即 PyQt5 仅支持新式语法)。对于 PyQt,需要某种方式来挂钩 pyqtBoundSignal 连接到插槽的机制。这对于自定义信号可能是可能的,但是所有内置信号呢?我看不到路……
      • @ekhumoro 是的,感谢您的澄清。虽然很遗憾 Qt 不支持这一点,但这就是为什么我认为 OP 最好寻找不同的调试方法。
      猜你喜欢
      • 1970-01-01
      • 2011-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-17
      • 1970-01-01
      • 1970-01-01
      • 2020-03-12
      相关资源
      最近更新 更多