2012-08-06 5 views
1

나는 신호를 PyQt4의 방법으로 연결하는 데 어려움을 겪고있다. 객체 A의 바운드 신호를 객체 B의 메서드 인 에 연결할 수 있지만 객체 A의 바운드 신호를 자체 (연결되는 객체) 메서드로 연결할 수 없습니다.
나는 무엇입니까? 잘못하고있는거야? 아래를 참조PyQt4에서 자기의 방법과 신호를 연결하기

from PyQt4.QtGui import * 
from PyQt4.QtCore import * 


class FooA(QObject): 
    trigger=pyqtSignal(str) 

    def receive_trigger(self,a): 
     print'triggered in FooA, string',a 

class MainObj(QObject): 
    def __init__(self): 
     self.a1=FooA() 
     self.a2=FooA() 
     #I can connect signals and methods of separate objects: 
     self.a1.trigger.connect(self.a2.receive_trigger) 
     self.a1.trigger.emit('hi') 
     #... but I can't connect a signal with a method of self 
     self.a1.trigger.connect(self.receive_trigger) 
     self.a1.trigger.emit('hi') 
    def receive_trigger(self,a): 
     print 'triggered in MainObj' 

는 다음과 같이 실행합니다 MainObj()으로 fooA 트리거

,으로 fooA 트리거 문자열 안녕하세요 , 문자열 하이

내가 추가 라인을 볼 것으로 예상, > MainObj에서 트리거 됨

미리 감사드립니다. Bill

+0

예상대로 작동합니다. 게시 한 코드가 실행하려는 코드와 동일한 지 확인하십시오. – ekhumoro

+0

확인 된 작업은 저에게도 좋습니다. – jdi

답변

2

신호는 QObject에 속해야하지만, QObject의 생성자를 호출하지 않았기 때문에이 문제가 발생합니다. FooA은 생성자를 대체하지 않으므로 기본 생성자가 호출되고 신호가 예상대로 작동합니다. 그러나 MainObj에서는 수퍼 클래스 '(QObject) 생성자를 호출하지 않으므로 신호가 작동하지 않습니다. 수정 중 하나를 넣으려면 :

QObject.__init__(self) 

또는

super(QObject, self).__init__() 

(당신의 규칙에 따라) MainObj의 생성자의 상단에, 예상대로 신호는 작동합니다.

+0

슈퍼 클래스 init을 호출하지 않는 것이 맞지만 실제로 OP 문제를 재현 할 수 있습니까? 이것이 어떤 버전의 PyQt4에서 작동하지 않습니까? – jdi

관련 문제