2013-07-10 8 views
7

메인 외부의 파이썬 스레드에서 GUI 스레드를 업데이트하는 방법을 찾으려고했습니다. sourceforge에있는 PyQt5 docs에는이를 수행하는 방법에 대한 좋은 지침이 있습니다. 그러나 나는 여전히 일을 할 수 없습니다.PyQt5 신호 및 슬롯 'QObject에 속성이 없습니다'오류가 발생했습니다.

대화 형 세션에서 다음 출력을 설명하는 좋은 방법이 있습니까? 이 객체들에 대해 emit 메소드를 호출 할 방법이 있을까요?

>>> from PyQt5.QtCore import QObject, pyqtSignal 
>>> obj = QObject() 
>>> sig = pyqtSignal() 
>>> obj.emit(sig) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'QObject' object has no attribute 'emit' 

>>> obj.sig.emit() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'QObject' object has no attribute 'sig' 

>>> obj.sig = pyqtSignal() 
>>> obj.sig.emit() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'PyQt5.QtCore.pyqtSignal' object has no attribute 'emit' 
+1

여기와 동일한 [PyQt5 어떤 모듈의 발광 방법을 발견? (http://stackoverflow.com/questions/17581506/pyqt5-in-what-module-is-the-emit-method -found) - __bound__ 신호에만'emit' 메서드가 있습니다. ('obj.sig = pyqtSignal()'은 여전히 ​​언 바운드 시그널입니다.) – mata

+0

@mata : 예, 저는 소스 포지 (sourceforge)의 PyQt5 문서에서 이러한 예제를 취하고있었습니다. [지적한] (http://stackoverflow.com/questions/17581506/pyfqt5-in-what-module-is-the-emit-method-found) emit 메서드는 바운드 신호를위한 것입니다. 즉, QObject로부터 상속받은 클래스의 멤버. 나는 위에 붙여진 대화 형 세션에서 그렇게하지 않았다는 것을 깨닫지 못했습니다. – ADB

+0

@ mata : 호기심, 위의 세 번째 예제와 같이 ** obj.sig = pyqtSignal() **의 유용성은 무엇입니까? – ADB

답변

15

다음 단어와 코드 PyQt5 docs에 있습니다.

새로운 신호 은 QObject.They 동적 클래스가 정의 된 후에 클래스 속성으로를 추가 할 수없는 클래스 정의의 일부 있어야 서브 클래스 정의되어야한다.

from PyQt5.QtCore import QObject, pyqtSignal 

class Foo(QObject): 

    # Define a new signal called 'trigger' that has no arguments. 
    trigger = pyqtSignal() 

    def connect_and_emit_trigger(self): 
     # Connect the trigger signal to a slot. 
     self.trigger.connect(self.handle_trigger) 

     # Emit the signal. 
     self.trigger.emit() 

    def handle_trigger(self): 
     # Show that the slot has been called. 

     print "trigger signal received" 
+0

와우, 1 년이 지난 지금! 답변을 수락했습니다 (위의 의견에서 질문이 삭제 되었음에도 불구하고). – ADB