PyQt - QLabel herdando
-
12-09-2019 - |
Pergunta
Eu quero herdar QLabel para adicionar lá o processamento de eventos de clique. Eu estou tentando este código:
class NewLabel(QtGui.QLabel):
def __init__(self, parent):
QtGui.QLabel.__init__(self, parent)
def clickEvent(self, event):
print 'Label clicked!'
Mas depois de clicar tenho nenhuma linha 'Etiqueta clicado!'
EDIT:
Ok, agora eu estou usando não 'ClickEvent' mas 'mousePressEvent'. E eu ainda tenho uma pergunta. Como posso saber o que exatamente rótulo foi clicado? Por exemplo, eu tenho 2 caixa de edição e 2 etiquetas. Etiquetas de conteúdo são pixmaps. Portanto, não há qualquer texto em rótulos, por isso não posso diferença discernir entre etiquetas. Como posso fazer isso?
EDIT2: Eu fiz este código:
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")
Em uma outra classe:
self.FirstLang = NewLabel(Form)
QtCore.QObject.connect(self.FirstLang, QtCore.SIGNAL('clicked()'), self.labelPressed)
slot na mesma classe:
def labelPressed(self):
print 'in labelPressed'
print self.sender()
Mas não há objeto emissor em auto. O que eu fiz de errado?
Solução
Respondendo sua segunda pergunta, eu vou continuar com base no exemplo @gnud:
- subclasse QLabel, substituir mouseReleaseEvent e adicionar um sinal para a classe, vamos chamá-lo clicado.
- verificação de qual botão foi clicado em mouseReleaseEvent, se for o esquerdo emitir o sinal clicado.
- conectar um slot para suas etiquetas clicado sinal e usar remetente () dentro para saber qual QLabel foi clicado.
Outras dicas
Não há nenhuma função clickEvent
em QWidget / QLabel. Você poderia ligar essa função para um sinal de Qt, ou você poderia fazer:
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!'
A resposta do PyQt Wiki funciona muito bem, mas eu faria acrescentar que a classe clickable
deve chamar widget.mouseReleaseEvent
(direita antes return True
), apenas no caso do utilizador ter personalizado este evento.