2011-09-30 4 views
4

신호가 방출되기 전에 신호가 있는지 확인해야합니다.pyqtSignal 및 QObject.receivers (..)

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

신호는 오른쪽 슬롯에 연결되어 성공적으로 신호를 방출합니다.
서명 신호를 확인할 때 QObject.receivers() 메서드는이 신호가 연결되어 있지 않음을 나타냅니다.
나는 이유가 틀린 서명인지 이해했다. 나는 신호의 충실한 서명을 기술하기위한 방법을 찾지 못했다.

답변

5

신호의 서명은 "test(QString, PyQt_PyObject)"입니다.

은 그래서 분명히 str는 C++ 유형 PyQt_PyObject에 매핑됩니다 ... QString 및 기타 기본 파이썬 개체 유형, dict, list에 매핑됩니다. 신호 서명

목록은 개체와 관련된 QMetaObject을 통해 얻을 수 있습니다 pyqt5 신호

test = Test() 
metaobject = test.metaObject() 
for i in range(metaobject.methodCount()): 
    print(metaobject.method(i).signature()) 
+0

고마워, 이것이 내가 필요한 것입니다. – PaKman

3

가되지 않습니다. QPushButton을 신호를 확인할

print('signal connected') 

은 (클릭) 모든 슬롯에 접속된다 : 그것은 각 QObject를 QObject를 .receivers (. QObject를신호)> 0

경우의 신호 특성으로 대체

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