Pregunta

quiero heredar QLabel añadir no haga clic en el procesamiento de eventos. Estoy tratando este código:

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

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

Sin embargo, después de hacer clic tengo ninguna línea 'Etiqueta clic!

EDIT:

Bien, ahora no estoy usando 'ClickEvent' pero 'mousePressEvent'. Y todavía tengo una pregunta. ¿Cómo puedo saber lo que se ha hecho clic exactamente etiqueta? Por ejemplo, tengo 2 cuadro de edición y 2 etiquetas. Las etiquetas de contenido son mapas de píxeles. Así que no hay ningún texto en las etiquetas, así que no pueden discernir diferencia entre etiquetas. ¿Cómo puedo hacer eso?

Edit2: Hice 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")

En otra clase:

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

ranura en la misma clase:

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

Pero no hay remitente del objeto en sí. Lo que hice mal?

¿Fue útil?

Solución

Responder a la segunda pregunta, voy a seguir basado en el ejemplo @gnud:

  • subclase QLabel, anular mouseReleaseEvent y añadir una señal a la clase, vamos a llamarlo clic.
  • comprobar qué botón se hizo clic en mouseReleaseEvent, si es el de la izquierda emiten la señal se hace clic.
  • conectar una ranura a sus etiquetas hace clic señal y usar remitente () dentro para saber qué se ha hecho clic QLabel.

Otros consejos

No hay ninguna función en clickEvent QWidget / QLabel. Se podía conectar esa función a una señal de Qt, o usted podría hacer:

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!'

La respuesta de la PyQt Wiki funciona muy bien, pero lo haría añadir que la clase clickable debe llamar widget.mouseReleaseEvent (justo antes return True), en caso de que el usuario ha personalizado este evento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top