【问题标题】:Mouseover event filter for a PyQT LabelPyQT 标签的鼠标悬停事件过滤器
【发布时间】:2011-04-20 23:34:58
【问题描述】:

我一直在尝试将示例 here 转换为使用简单标签。

代码如下:

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 并捕获/处理QHoverEvent 甚至QLabel。可能对某人有帮助。

标签: python pyqt mouseover


【解决方案1】:

我相信你需要从eventFilter中返回True或者False,来表明你是否已经完全处理了这个事件。

【讨论】:

  • 是的。我刚刚测试了它。奇迹般有效。谢谢,@jkerian。
【解决方案2】:

看看我刚刚发现了什么。这是来自一些实际代码的 sn-p,因此类名在我的实例中是特定的。

    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,但如果 activeLayer 的运行实例未命名为“Whiteboard”,则软件会通过“原始”mouseMoveEvent 运行。

【讨论】:

    【解决方案3】:

    类 mouseoverEvent(QtCore.QObject): def init(自我,父母): super(mouseoverEvent, self).init(父)

    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)

    【讨论】:

      猜你喜欢
      • 2018-12-29
      • 2018-08-13
      • 1970-01-01
      • 2011-05-03
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      • 2023-03-14
      • 2017-04-29
      相关资源
      最近更新 更多