PYQT 4에서 이벤트를 처리하는 올바른 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1904567

  •  19-09-2019
  •  | 
  •  

문제

나는 다음과 같은 예를 보았습니다.

self.connect(self.ui.add_button, QtCore.SIGNAL('clicked()'),self.printer)

그리고 다음과 같은 예 :

self.ui.add_button.clicked.connect(self.printer)

방금 QT를 배우기 시작했습니다. 어느쪽에 집중해야합니까?

도움이 되었습니까?

해결책

두 번째 예제는 일부 QT 버전 (최신 버전)에 의해서만 지원되는 반면, 첫 번째는 이전 버전에서 지원한다고 생각합니다. 그러나 둘 다 맞습니다.

다른 팁

Afaik, 신호가 과부하 된 신호가 있으면 최신 스타일이 작동하지 않으므로

self.ui.add_button.clicked.connect(self.printer)

또한

clicked(float, float)

그래서 당신은 오래된 스타일로 돌아 가야합니다. 둘 다 아는 것이 항상 좋습니다.

나는이 게시물이 꽤 오래되었다는 것을 알고 있지만, 나는 단지 그것을 가로 질러 우연히 발견했을 것입니다. 아마도 당신도 아마도 당신의 하루를 구할 것입니다.) 좋아요 ... 그건 그렇고, 그것은 내 첫 번째 게시물입니다.

경고, 나는이 코드를 테스트하지 않았고, 얼마 전에 쓴 코드 스 니펫을 복사 했으므로 오류가있을 수 있지만 어쨌든 도움이되기를 바랍니다.

PYQT의 새로운 스타일은 간단히 신호를 보냅니다.

# notice that the signal declarations are at class level (not inside some method)

class MyClass(QObject):    # must subclass QObject (or subclass)

    # declaring signals
    mySimpleSignal = pyqtSignal()
    mySignalWithArguments = pyqtSignal(int, list)
    myOverloadedSignal = ([int, object],[str,object])

    def __init__(self, parent=None):
        super(MyClass,self).__init__(parent=parent)    # remember to init the super class
        [...]

    # methods
    [...]

    # connecting signals
    def connectSignalsMethod(self):
        # connecting simple signal
        self.mySimpleSignal.connect(self.mySlot)
        # connecting signal with arguments
        self.mySignalWithArguments.connect(self.mySlotWithArguments)
        # connecting overloaded signals
        self.myOverloadedSignal[int, object].connect(self.mySlot1)
        self.myOverloadedSignal[str, object].connect(self.mySLot2)

        # same syntax for disconnect()


    # emitting signals
    def emitSignalsMethod(self):
        # emitting simple signal
        self.mySimpleSignal.emit()
        # emitting signal with arguments
        self.mySignalWithArguments.emit(123,['this','is','a','list'])
        # emitting overloaded signal
        myOverloadedSignal[str,object].emit('this is a string', myObject)


    # my slots
    @pyqtSlot()
    def mySlot(self):
        print('hey!')

    @pyqtSlot(int, list)
    def mySlotWithArguments(self, someNumber, someList):
        print('got a number: %d and a list: %s' % (someNumber, someList))

    @pyqtSlot(int, object)
    def mySlot1(self, intArg, objectArg):
        print('got an int and an object')

    @pyqtSlot(str, object)
    def mySlot2(self, str, object):
        print('got a string and an object')

    # an overloaded slot
    @pyqtSignal(int)
    @pyqtSignal(str)
    def overloadedSlot(someArgument)
        print('got something: %s' % someArgument)

그렇지 않으면 이것을 시도하십시오http://www.harshj.com/2010/05/06/pyqt-faq-custom-signals-jpeg-mouse-mouse-more-more/#custom

편집 : 이벤트와 신호는 동일하지 않으며 위에서 보는 것은 신호에 관한 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top