Frage

ich will QLabel erben, um dort die Ereignisverarbeitung hinzufügen klicken. Ich versuche, diesen Code ein:

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

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

Aber nach dem Klicken auf Ich habe keine Zeile 'Label geklickt!'

EDIT:

Okay, jetzt benutze ich nicht ‚clickEvent‘, sondern ‚mouse‘. Und ich habe noch eine Frage. Wie kann ich wissen, was genau Label geklickt wurde? Zum Beispiel habe ich 2 Bearbeitungsfeld und 2 Etikett. Labels Inhalte sind pixmaps. So gibt es keinen Text in Etiketten, also kann ich nicht Unterschied zwischen den Etiketten erkennen. Wie kann ich das tun?

EDIT2: Ich habe diesen Code:

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 einer anderen Klasse:

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

Slot in der gleichen Klasse:

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

Aber es ist nicht Senderobjekt in sich selbst. Was ich falsch gemacht habe?

War es hilfreich?

Lösung

Ihre zweite Frage zu beantworten, werde ich basierend auf @gnud Beispiel weiter:

  • Unterklasse QLabel, außer Kraft setzen und mouse ein Signal an die Klasse hinzufügen, nennen wir es angeklickt wird.
  • prüfen, welche Taste in mouse geklickt wurde, wenn es die linke das geklickt Signal auszusenden ist.
  • schließen Sie einen Steckplatz auf Ihre Etiketten geklickt Signal und verwenden Sender () innen zu wissen, welche QLabel geklickt wurde.

Andere Tipps

Es gibt keine Funktion clickEvent in QWidget / QLabel. Sie könnten diese Funktion zu einem Qt-Signal verbinden, oder Sie tun können:

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

Die Antwort aus dem PyQt Wiki sehr gut funktioniert, aber ich würde hinzufügen, dass die clickable Klasse widget.mouseReleaseEvent (rechts vor return True) nennen sollte, nur für den Fall, dass der Benutzer diese Veranstaltung angepasst werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top