PyQT标签的鼠标悬停事件过滤器

5

我一直在尝试将这里的示例转换为适用于简单标签的代码。

以下是代码:

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)

现在奇怪的是,这实际上是有效的,但我的控制台会被刷屏显示“mousemove!”(很好),同时还会出现错误:TypeError: invalid result type from mouseoverEvent.eventFilter()

我还没有完全弄清楚事件之间的复杂关系,所以这对我来说有点难以理解。那么,是什么原因呢?

提前致谢。


在我的情况下,我必须设置QLabel的标签属性为Qt.WA_Hover并捕获/处理QLabelQHoverEvent事件。这对某些人可能会有帮助。 - krizajb
3个回答

9

我相信你需要从eventFilter中返回TrueFalse,以指示您是否完全处理了事件。


是的。我刚测试了一下。运行得像魔法一样好。谢谢,@jkerian。 - jedmao

0

看看我刚刚发现的东西。这是一些实际代码中的片段,所以类名在我的实例中是具体的。

    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())

我所做的是重新声明了mouseMoveEvent,但如果活动层的运行实例未命名为“Whiteboard”,则软件将通过“原始”mouseMoveEvent运行。

0

鼠标悬停事件类(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)

self.filter = 鼠标悬停事件(self) self.label.installEventFilter(self.filter)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接