5

信号が放出される前に、リスナーの存在を確認する必要があります。

class Test(QObject):
    test = pyqtSignal(str,dict)
    def run(self):
        if self.receivers(SIGNAL("test(str,dict)"):
           self.test.emit('blablabla',{})`

信号は右側のスロットに接続され、正常に信号を発信します。
署名信号をチェックすると、メソッドQObject.receivers()はこの信号が接続されていないことを示します。
理由は正しくない署名であることがわかりました。信号の忠実な署名を指定する方法が見つかりませんでした。

4

2 に答える 2

8

pyqt5 SIGNAL では非推奨です。各QObjectのシグナル属性に置き換えられます

QObject .receivers ( QObject . signal ) > 0 の場合:

    print('signal connected')

clicked() が任意のスロットに接続されている QPushButton シグナルを確認するには

button = QPushButton()
.
.
if button.receivers(button.clicked) > 0:
    .....
于 2015-09-06T16:27:19.367 に答える
5

シグナルの署名は"test(QString, PyQt_PyObject)".

したがって、明らかに、strは にマップされQString、他のネイティブの python オブジェクト型、dictlist... は C++ の type にマップされますPyQt_PyObject

シグナル シグネチャのリストはQMetaObject、オブジェクトに関連付けられた を介して取得できます。

test = Test()
metaobject = test.metaObject()
for i in range(metaobject.methodCount()):
    print(metaobject.method(i).signature())
于 2011-10-15T18:38:33.843 に答える