Python / PySide / Qt:在槽中查找信号名称
在一个小的 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()