PyQt - QLabel héritant
-
12-09-2019 - |
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?
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.