pyqt6获取matplotlib上的鼠标事件

本文讲述了如何在使用PyQt和Matplotlib开发的桌面程序中,解决因作图区域拦截鼠标事件导致的滚动和点击操作问题。通过将matplotlib的MouseEvent转换为Qt的QWheelEvent并传递给QWidget的wheelEvent函数,实现对绘图区域的窗口应用操作。
摘要由CSDN通过智能技术生成

当用pyqt结合matplotlib,开发桌面程序的时候,想要在曲线图上添加一些鼠标操作,例如:鼠标滚轮滑动,点击等。这时因为作图区域覆盖在部件上面,所以会拦截鼠标事件。qt无法获取到鼠标事件。

        # 创建Matplotlib图形
        self.fig = Figure(figsize=(8.5, 7))
        self.canvas = FigureCanvas(self.fig)
        self.canvas.mpl_connect('scroll_event', self.canvas_wheelEvent)
        
    def canvas_wheelEvent(self, event):
        print(type(event))
        print('图表', event)

当在鼠标在图表区域做操作时,canvas_wheelEvent 会拦截操作事件
在这里插入图片描述
在这里插入图片描述

当有需求要qt窗口处理该事件的时候,需要把事件对象传递给 QWidget

    def canvas_wheelEvent(self, event):
        print(type(event))
        print('图表', event)
        print(event.guiEvent)
        self.wheelEvent(event.guiEvent)

其中 wheelEvent 为qt的鼠标滚轮事件函数,接受的参数类型为 wheelEvent(self, a0: QWheelEvent) QWheelEvent类型,
而 matplotlib 的鼠标事件为MouseEvent

<class 'matplotlib.backend_bases.MouseEvent'>

所以需要把事件转成qt识别的 UI事件类型 event.guiEvent再传递给qt事件处理函数。

<PyQt6.QtGui.QWheelEvent object at 0x000001AE8A175408>

这样就可以直接在绘图上进行一些窗口应用的的常用操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值