pyqt -qlabel 상속
-
12-09-2019 - |
문제
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
), 사용자 가이 이벤트를 사용자 정의 한 경우를 대비하여.
제휴하지 않습니다 StackOverflow