Question

Je veux hériter QLabel pour y ajouter cliquez sur le traitement des événements. J'essaie ce code:

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

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

Mais après avoir cliqué sur Je n'ai pas la ligne 'étiquette clic!

EDIT:

D'accord, maintenant je me sers pas « clickEvent » mais « mousePressEvent ». Et j'ai encore une question. Comment puis-je savoir ce qui a cliqué sur exactement l'étiquette? Par exemple, j'ai 2 boîte d'édition et 2 étiquettes. le contenu des étiquettes sont les fichiers. Donc, il n'y a pas de texte dans les étiquettes, donc je ne peux discerner la différence entre les étiquettes. Comment puis-je faire?

EDIT2: J'ai fait ce 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")

Dans une autre classe:

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

fente dans la même classe:

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

Mais il n'y a pas objet émetteur dans l'auto. Ce que je fait de mal?

Était-ce utile?

La solution

Répondre à votre deuxième question, je vais poursuivre sur la base par exemple @gnud:

  • sous-classe QLabel, passer outre mouseReleaseEvent et ajouter un signal à la classe, nous allons l'appeler cliqué.
  • vérifier quel bouton a été cliqué dans mouseReleaseEvent, si elle est celui de gauche émet le signal cliqué.
  • connecter une fente à vos étiquettes cliqués signal et utiliser expéditeur () à l'intérieur pour savoir ce qui a été cliqué QLabel.

Autres conseils

Il n'y a pas de fonction dans clickEvent QWidget / QLabel. Vous pouvez connecter cette fonction à un signal Qt, ou vous pouvez faire:

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 réponse de la PyQt Wiki fonctionne très bien, mais je voudrais ajouter que la classe clickable devrait appeler widget.mouseReleaseEvent (juste avant return True), juste au cas où l'utilisateur a personnalisé cet événement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top