0

小さなpython 2.7プロジェクト内でpyside qt bindingモジュールを使用して、信号のソースを見つけたいと思っています。そのため、スロット内で、このスロットが実際にトリガーされたシグナルを確認する手段が必要です。

これにより、実際の送信者オブジェクトのクリーンなデバッグ表記が得られることがわかりました。

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 に答える