문제

Qlabel을 상속하여 이벤트 처리를 클릭합니다. 이 코드를 시도하고 있습니다.

class NewLabel(QtGui.QLabel):
    def __init__(self, parent):
        QtGui.QLabel.__init__(self, parent)

    def clickEvent(self, event):
        print 'Label clicked!'

그러나 클릭 한 후에는 '레이블 클릭 된 라인이 없습니다!'

편집하다:

자, 이제 나는 'clickevent'가 아니라 'mousepressevent'를 사용하고 있습니다. 그리고 나는 여전히 질문이 있습니다. 정확히 레이블을 클릭 한 레이블을 어떻게 알 수 있습니까? 예를 들어, 2 개의 편집 상자와 2 개의 레이블이 있습니다. 레이블 내용은 pixmaps입니다. 레이블에는 텍스트가 없으므로 레이블의 차이를 분별할 수 없습니다. 어떻게 할 수 있습니까?

edit2 :이 코드를 만들었습니다.

class NewLabel(QtGui.QLabel):
    def __init__(self, firstLabel):
        QtGui.QLabel.__init__(self, firstLabel)

    def mousePressEvent(self, event):
        print 'Clicked'
        #myLabel = self.sender()  # None =)
        self.emit(QtCore.SIGNAL('clicked()'), "Label pressed")

다른 수업에서 :

self.FirstLang = NewLabel(Form)
QtCore.QObject.connect(self.FirstLang, QtCore.SIGNAL('clicked()'), self.labelPressed)

같은 클래스의 슬롯 :

def labelPressed(self):
    print 'in labelPressed'
    print self.sender()

그러나 자체적으로 발신자 객체가 없습니다. 내가 뭘 잘못 했어?

도움이 되었습니까?

해결책

두 번째 질문에 대답하면 @gnud 예제를 기반으로 계속하겠습니다.

  • 서브 클래스 Qlabel, MouserEleaseevent를 무시하고 클래스에 신호를 추가하고 클릭 한 것으로라고합시다.
  • 왼쪽이 클릭 된 신호를 방출하는 경우 MouserEleaseevent에서 클릭 한 버튼을 확인하십시오.
  • 레이블에 슬롯을 클릭 한 신호 및 사용에 연결하십시오. 보내는 사람() 내부는 어떤 Qlabel을 클릭했는지 알기 위해 내부.

다른 팁

기능이 없습니다 clickEvent qwidget/qlabel에서. 해당 기능을 QT 신호에 연결하거나 수행 할 수 있습니다.

class NewLabel(QtGui.QLabel):
    def __init__(self, parent=None):
        QtGui.QLabel.__init__(self, parent)
        self.setText('Lorem Ipsum')

    def mouseReleaseEvent(self, event):
        print 'Label clicked!'

그 답변 Pyqt Wiki 매우 잘 작동하지만 추가 할 것입니다 clickable 수업은 전화해야합니다 widget.mouseReleaseEvent (직전 return True), 사용자 가이 이벤트를 사용자 정의 한 경우를 대비하여.

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