0

在一个小型 python 2.7 项目中使用 pyside qt 绑定模块,我想找出信号的来源。所以在一个槽内,我想有一些方法来询问这个槽实际上是用什么信号触发的。

我发现这为我提供了实际发件人对象的干净调试符号:

sigItem = "<anonymous>" if not self.sender() else \
          re.search('<(.+) object at .+>', repr(self.sender()), 0).group(1)

但到目前为止,我发现的所有识别导致该插槽被调用的实际信号显然是调用者对象内的信号索引:

sigIndex = self.senderSignalIndex()

那么我怎样才能找到实际的信号名称呢?

4

1 回答 1

3

您可以使用索引来获取 QMetaMethod,但仅此而已。显然,Qt 不想让你知道更多。

from PyQt4 import QtCore

senderSignalId = None

class Sender(QtCore.QObject):

    signal1 = QtCore.pyqtSignal()
    signal2 = QtCore.pyqtSignal()

class Receiver(QtCore.QObject):

    @QtCore.pyqtSlot()
    def slot(self):
        global senderSignalId
        senderSignalId = self.senderSignalIndex()

sender = Sender()
receiver = Receiver()
sender.signal1.connect(receiver.slot)
sender.signal2.connect(receiver.slot)

sender.signal1.emit()
print sender.metaObject().method(senderSignalId).signature() // signal1()

sender.signal2.emit()
print sender.metaObject().method(senderSignalId).signature() // signal2()
于 2013-01-31T12:20:59.263 回答