Domanda

voglio ereditare QLabel da aggiungere ci cliccare elaborazione di eventi. Sto cercando di questo codice:

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

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

Ma dopo aver fatto clic non ho linea 'Etichetta cliccato!'

Modifica

Ok, ora non sto usando 'ClickEvent' ma 'mousePressEvent'. E ho ancora una domanda. Come posso sapere che cosa esattamente etichetta é stato cliccato? Ad esempio, ho 2 casella di modifica e 2 etichette. Le etichette di contenuto sono pixmaps. Quindi non ci sono testo in etichette, quindi non posso discernere la differenza tra le etichette. Come posso fare questo?

EDIT2: Ho fatto questo codice:

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")

In un'altra classe:

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

Slot nella stessa classe:

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

Ma non c'è object sender in sé. Quello che ho fatto di sbagliato?

È stato utile?

Soluzione

rispondere alla tua seconda domanda, io continuerò basa sulla esempio @gnud:

  • sottoclasse QLabel, ignorare mouseReleaseEvent e aggiungere un segnale alla classe, chiamiamolo cliccato.
  • controllare quale pulsante è stato cliccato in mouseReleaseEvent, se si tratta di quella di sinistra emette il segnale cliccato.
  • collegare uno slot per le etichette cliccato del segnale e utilizzare mittente () dentro per sapere quale QLabel stato cliccato.

Altri suggerimenti

Non c'è alcuna funzione clickEvent in QWidget / QLabel. È possibile collegare tale funzione ad un segnale di Qt, o si potrebbe fare:

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 risposta del PyQt Wiki funziona molto bene, ma lo farei aggiungere che la classe clickable dovrebbe chiamare widget.mouseReleaseEvent (a destra prima return True), nel caso in cui l'utente ha personalizzato questo evento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top