Mouseover event filter for a PyQT Label
I've been trying to convert the example here to work with a simple label.
Here's the code:
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(s开发者_StackOverflow中文版elf.filter)
Now curiously, this actually works, but not without my console being spammed with "mousemove!" (good) as well as the error: TypeError: invalid result type from mouseoverEvent.eventFilter()
I've not quite figured out the complex relationship between events yet, so this is a bit greek to me. So, what gives?
Thanks in advance.
I believe you need to return True
or False
from the eventFilter, to indicate whether you have handled the event completely or not.
Check out what I just discovered. This is a snippet from some actual code, so class names are specific in my instance.
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())
What I have done is re-declared the mouseMoveEvent, but if the running instance of the activeLayer is not named 'Whiteboard' then the software runs through an 'original' mouseMoveEvent.
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!"
return super(mouseoverEvent, self).eventFilter(object, event)
self.filter = mouseoverEvent(self) self.label.installEventFilter(self.filter)
精彩评论