2009-06-07 10 views
2

Ich möchte QLabel erben, um dort Click-Event-Verarbeitung hinzuzufügen. Ich versuche, diesen Code:PyQt - QLabel erbt

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 auf das Label geklickt wurde? Zum Beispiel habe ich 2 Bearbeitungsfeld und 2 Etiketten. Etiketteninhalte sind Pixmaps. Es gibt also keinen Text in den Etiketten, daher kann ich keinen Unterschied zwischen den Etiketten feststellen. Wie kann ich das machen?

EDIT2: ich diesen Code gemacht:

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 self. Was habe ich falsch gemacht?

+0

Ich weiß nicht, wie PyQt funktioniert, aber Sie erhalten sender() von QObject, erbte die Klasse mit dem LabelPressed-Slot von QObject? es sollte, da es einen Slot hat ... zumindest in C++. –

Antwort

1

Ihre zweite Frage zu beantworten, werde ich auf @gnud Beispiel weiterhin auf Basis:

  • Unterklasse QLabel, außer Kraft setzen und fügen mouse ein Signal an die Klasse, nennen wir es geklickt.
  • überprüfen Sie, welche Schaltfläche in MouseReleaseEvent angeklickt wurde, wenn es die linke das geklickte Signal emittiert.
  • Verbinden Sie einen Steckplatz mit dem geklicktem Signal und verwenden Sie sender(), um zu wissen, auf welches QLabel geklickt wurde.
1

In QWidget/QLabel gibt es keine Funktion clickEvent. 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!' 
1

Die Antwort aus den PyQt Wiki funktioniert sehr gut, aber ich möchte hinzufügen, dass die clickable Klasse widget.mouseReleaseEvent nennen sollte (rechts vor return True), falls der Benutzer dieses Ereignis besonders angefertigt hat.

+0

Guter Punkt - aber es wäre noch korrekter, wenn der 'eventFilter' in allen Fällen einfach' false' zurückgibt (da er das Ereignis nicht wirklich behandelt). – ekhumoro