2010-10-04 6 views
4

J'ai essayé de convertir l'exemple here pour qu'il fonctionne avec une simple étiquette.Filtre d'événement Mouseover pour une étiquette PyQT

Voici le code: "mousemove"

class mouseoverEvent(QtCore.QObject): 
    def __init__(self, parent): 
     super(mouseoverEvent, self).__init__(parent) 
    def eventFilter(self, object, event): 
     if event.type() == QtCore.QEvent.MouseMove: 
      print "mousemove!" 

self.filter = mouseoverEvent(self) 
self.label.installEventFilter(self.filter) 

Maintenant curieusement, cela fonctionne réellement, mais non sans ma console spammer avec (Bien) ainsi que l'erreur: TypeError: type de résultat non valide à partir mouseoverEvent.eventFilter()

Je n'ai pas encore vraiment la relation complexe entre les événements encore, c'est donc un peu grec pour moi. Alors, qu'est-ce qui donne?

Merci d'avance.

+0

Dans mon cas, j'ai dû définir l'attribut label de 'QLabel' à' Qt.WA_Hover' et attraper/gérer le 'QHoverEvent' même du' QLabel'. Ça pourrait être utile pour quelqu'un. – krizajb

Répondre

7

Je crois que vous devez retourner True ou False à partir du eventFilter, pour indiquer si vous avez traité l'événement complètement ou non.

+0

Oui. Je viens de le tester. Fonctionne comme un charme. Merci, @jkerian. – jedmao

0

Découvrez ce que je viens de découvrir. Ceci est un extrait de code réel, donc les noms de classe sont spécifiques dans mon cas.

def mouseMoveEvent(self, event=None): 
     if self.activeLayer.layerName != 'Whiteboard': super(MapPage, self).mouseMoveEvent(event) 
     else: 
      if (event.buttons() & Qt.LeftButton) and self.scribbling: 
       self.drawLineTo(event.scenePos()) 

Ce que je l'ai fait est à nouveau déclaré le mouseMoveEvent, mais si l'instance de l'activeLayer n'est pas nommé « Tableau blanc », puis le logiciel fonctionne à travers un mouseMoveEvent « original ».