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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top