Python / PySide / Qt:在槽中查找信号名称

0 投票
1 回答
1789 浏览
提问于 2025-04-17 14:18

在一个小的 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()

那么,我该如何找出这个信号的名称呢?

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()

撰写回答