PyQt - QLabel vererben
-
12-09-2019 - |
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?
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.