최근에 새로운 pySide 신호 및 슬롯을 사용하기 시작했으며이를 처리하기 위해 많은 코드가 필요하다는 것을 알게되었습니다. 나는 잘못된 것을하고 누군가가 그것을하는 더 좋은 방법을 가지기를 바랍니다.pySide 신호 및 슬롯 슬롯이 너무 많습니까?
#first I need to declare it at the class level
class UI(QtGui.QMainWindow):
my_signal = QtCore.Signal(str, str)
# next I need to connect it to something in the UI
self.my_signal.connect(self._mySignalHandler)
# then I need the actual handler that does the work:
@QtCore.Slot(str, str)
def _mySignalHandler(self, a, b):
pass
# and finally I needs an accessor method for it to use it from the outside the UI class:
def mySignalAccessor(self, a, b):
self.my_signal.emit(a, b)
이것은 간단한 작업을 수행하는 코드입니다. 나는 결국 비슷하게 불리는 두 가지 메소드와 변수를 가지고 결국 버그를 완전히 잃어버린 좋은 방법이다. 그럴 수있는 더 나은 방법이 있습니까?
클래스의 내부 작업을 외부 프로세스에 노출시키는 것이 좋지 않은 이유는 신호 방출을 숨기는 접근 방법을 사용하는 이유입니다. 다른 클래스는 이것이 신호이고 방출되어야한다는 것을 알지 못합니다. – pawel
@pavel. 그것은 관용적 인 python이 아닙니다. 자바와 비슷하게 들립니다. 그러나 어떤 경우 든 다른 클래스가이 신호에 대해 알지 못하는 경우 왜 접근자를 제공합니까? 시그널을 클래스 내부에 넣고 싶다면, 일반적인 파이썬 관용구는 슬롯을 사용했을 때처럼 맨 앞줄로 이름을 짓는 것입니다. – ekhumoro
신호가 내부에 들기를 원하지 않습니다. 내부 구조를 노출시키지 않고 인터페이스를 외부에서 제어 할 수 있기를 원합니다. 다른 클래스가 'emit'을 직접 호출하고 인터페이스를 신호를 사용하지 않고 'emit'이 아닌 다른 것으로 변경하면 많은 코드가 업데이트되어야합니다. 내 접근자를 사용하여 인터페이스가 외부 세계와 통신하는 방법을 제어하고 깨끗한 분리를 제공합니다. – pawel