pyqtSignal и QObject.receivers (..) - PullRequest
       16

pyqtSignal и QObject.receivers (..)

4 голосов
/ 30 сентября 2011

Мне нужно проверить сигнал на наличие слушателя, прежде чем он будет излучен.

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

Сигнал подключен к правому слоту и успешно излучает сигналы.
При проверке подписисигнал, метод QObject.receivers() показывает, что этот сигнал не подключен.
Я понял, причина была неправильная подпись, я не нашел метод, чтобы указать точную сигнатуру сигнала.

Ответы [ 2 ]

5 голосов
/ 15 октября 2011

Подпись для вашего сигнала "test(QString, PyQt_PyObject)".

Очевидно, что str отображается на QString, а другие собственные типы объектов Python, dict, list ... отображаются на тип C ++ PyQt_PyObject.

Список сигнатур сигналов можно получить через QMetaObject, связанный с вашим объектом:

test = Test()
metaobject = test.metaObject()
for i in range(metaobject.methodCount()):
    print(metaobject.method(i).signature())
4 голосов
/ 06 сентября 2015

В pyqt5 СИГНАЛ устарел. Он заменяется атрибутом сигнала каждого QObject

если QObject . Приемники ( QObject . сигнал )> 0:

    print('signal connected')

Для проверки сигнала QPushButton clicked () подключен к любому слоту

button = QPushButton()
.
.
if button.receivers(button.clicked) > 0:
    .....
...