Mouseover event filter for a PyQT Label

余生长醉 提交于 2019-11-28 08:44:08

问题


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(self.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.


回答1:


I believe you need to return True or False from the eventFilter, to indicate whether you have handled the event completely or not.




回答2:


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.




回答3:


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)



来源:https://stackoverflow.com/questions/3858449/mouseover-event-filter-for-a-pyqt-label

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!