2012-06-26 4 views
2

그래서 : 나는 다른 곳에서는 그 신호를 선언하는 경우클래스의 필드 멤버가 아닌 새로운 스타일의 pyqt 신호를 생성 할 수 있습니까? 내가 PyQt4이와 함께 다음과 같은 스타일의 신호를 생성하기 위해 볼 수있는 유일한 방법에 대한

class MyCustomClass(QtCore.QThread): 
    custom_signal = QtCore.pyqtSignal(str) 

내 쇠고기가가, PyQt는 어떻게 custom_signal 아무튼 대해 나 오류가 발생합니다 connect() 함수가 없습니다.

단순한 일을하고 싶을 때 보일러 플레이트/반복 코드를 제거하는 데 도움이되는 도우미 함수를 만들고 싶습니다. 새 스레드를 시작하고, 스레드에서 작업을 수행하고, 결과를 객체에 신호로 보냅니다. . 그러나 클래스에서 정의 할 신호가 필요할 때가 어렵습니다.

신호를 로컬 변수로 사용하는 방법은 없습니까?

+0

"하지만 신호는 클래스에 정의 할 필요가있을 때 그것은 어렵다." 왜? – Junuxx

+0

생성자를 통해 신호의 유형을 정의 할 수 없습니다. 즉, 보낼 신호의 유형을 다양하게 조합하여 처리 할 수있는 클래스 모음이 필요합니다. – Sandro

답변

1

질문을 올바르게 이해하고 있는지 잘 모르겠지만 의견을 통해 모든 유형에서 작동하는 신호를 정의하는 것으로 충분하다고 생각하십니까?

class MyCustomClass(QtCore.QThread): 
    custom_signal = QtCore.pyqtSignal(object) 

간단한 테스트 : : 그런 경우에는, 당신은 유형으로 객체를 사용할 수

>>> def callback(result): 
... print type(result) 
... 
>>> obj = MyCustomClass() 
>>> obj.custom_signal.connect(callback) 
>>> obj.custom_signal.emit('hello') 
<type 'str'> 
>>> obj.custom_signal.emit({'x': 1}) 
<type 'dict'> 
+0

이것은 당황 스럽습니다 ... 왜 모든 것을 위해 객체를 사용하지 않는 것이 좋을까요? – Sandro

+0

매개 변수 유형이 중요하지 않은 (드문) 경우에는 object를 사용하는 것이 좋습니다. 특정 유형 만 수용 가능한 경우에는 명시 적으로 오버로드로 정의해야합니다. 따라서 해당 유형에 연결할 수 있고 콜백에서 유형을 확인할 필요가 없습니다. – Ingrid