为matplotlib生成的图添加编辑条,我们导入NavigationToolbar2QT

from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT

继承关系:

  

其中,NavigationToolbar2是实现NavigationToolbar2QT有关编辑条的主要实现类,下面对NavigationToolbar2进行详细分析。
涉及zoom功能的有四个函数: zoom(), press_zoom(), drag_zoom(), release_zoom()
涉及pan功能的四个函数与之类似.
  • zoom()

鼠标按下事件绑定 press_zoom(),鼠标释放事件绑定release_zoom()

  • press_zoom()

判断是鼠标左键还是右键触发的点击事件,存入self._button_pressed中(1: 左键;2: 右键)。

关键代码分析: 将鼠标点击的坐标(x, y)、figure中的axes对象,i(含义不明), axes对象的rect(xmin, xmax, ymin, ymax)append(添加)到self._xypress中,代码如下:

self._xypress.append((x, y, a, i, a._get_view()))

鼠标点击事件绑定_switch_on_zoom_mode()以确认zoom缩放模式(左键缩小/右键放大)

鼠标拖动事件绑定drag_zoom()

鼠标释放事件绑定_switch_off_zoom_mode()清除zoom缩放模式的设置

  • drag_zoom()

读取self._xypress中的记录(press_zoom中有详细参数介绍),限制绘制区域(不超出Axes对象)

根据读取的参数绘制矩形区域,

self.draw_rubberband(event, x1, y1, x2, y2)
  • release_zoom()

取消press_zoom()中注册的事件,移除drag_zoom()中绘制的矩形

添加功能: 无视5像素之下的zoom操作,检测共享xy轴的图形

根据self._button_pressed设置in/out(缩放/放大)

关键代码分析: 绘制一个指定的axes区域;参数: [lastx], [lasty]: press(按下)的坐标;[x], [y]: release(释放鼠标)的坐标;[direction]:‘in’: 左键,‘out’:右键;

[self._zoom_mode]: ‘x’:x方向,‘y’:y方向;[twinx], [twiny]: 关于共享坐标轴的图像显示(未深入研究)。

a._set_view_from_bbox((lastx, lasty, x, y), direction,self._zoom_mode, twinx, twiny)

 Other method:

      push_current(): Push the current view limits and position onto the stack

    save_figure():  Save the current figure.(override require)

    draw():  Redraw the canvases, update the locators.

   set_message(): Display a message on toolbar or in status bar.
   back(), forward(): move back/forward up the view lim stack
   home(): Restore the original view.

   set_history_buttons():  Enable or disable the back/forward button.
    press(): Called whenever a mouse button is pressed.
    draw_rubberband(self, event, x0, y0, x1, y1), remove_rubberband(): Draw/Remove a rectangle rubberband to indicate zoom limits (not guaranteed that ``x0 <= x1`` and ``y0 <= y1`)

matplotlib PyQt5 nivigationBar 中pan和zoom功能的探索的更多相关文章

  1. 零元学Expression Blend 4 - Chapter 23 Deep Zoom Composer与Deep Zoom功能

    原文:零元学Expression Blend 4 - Chapter 23 Deep Zoom Composer与Deep Zoom功能 最近有机会在工作上用到Deep Zoom这个功能,我就顺便介绍 ...

  2. WCF学习之旅—WCF4.0中的简化配置功能(十五)

    六 WCF4.0中的简化配置功能 WCF4.0为了简化服务配置,提供了默认的终结点.绑定和服务行为.也就是说,在开发WCF服务程序的时候,即使我们不提供显示的 服务终结点,WCF框架也能为我们的服务提 ...

  3. Windows 10 版本 1507 中的新 AppLocker 功能

    要查看 Windows 10 版本信息,使用[运行]> dxdiag  回车 下表包含 Windows 10 的初始版本(版本 1507)中包括的一些新的和更新的功能以及对版本 1511 的 W ...

  4. 禁用datagridview中的自动排序功能

    把datagridview中的自动排序功能禁用自己收集的两种方法,看看吧①DataGridView中的Columns属性里面可以设置.进入"EditColumns"窗口后,在相应的 ...

  5. 【记录】尝试用android-logging-log4j去实现log输出内容到sd卡中的文件的功能

    [背景] 折腾: [记录]给Android中添加log日志输出到文件 期间,已经试了: [记录]尝试用android中microlog4android实现log输出到文件的功能 但是不好用. 然后就是 ...

  6. 在Abp中集成Swagger UI功能

    在Abp中集成Swagger UI功能 1.安装Swashbuckle.Core包 通过NuGet将Swashbuckle.Core包安装到WebApi项目(或Web项目)中. 2.为WebApi方法 ...

  7. Shepherd – 在应用程序中轻松实现引导功能

    Shepherd 是一个指导用户使用应用程序的 JavaScript 库.它使用 Tether——另一个开源库,实现所有的步骤.Tether 确保你的步骤不会溢出屏幕或被剪裁.你可以很容易地指导用户使 ...

  8. 怎样用好ZBrush 中的映射大师功能

    Projection Master可以理解为映射大师它是ZBrush®中一个独特的功能,允许在3D模型中使用2D和2.5D笔刷,用户可以利用此功能将绘制的颜色. Texture及纹理等映射到模型表面. ...

  9. 网页中插入QQ在线功能

    网页中插入QQ在线功能 本随笔记录的是网页中如何插入qq在线聊天,这里讲解的是 普通QQ在线聊天操作. 例:第一种方式  使用 tencent://message/?uin=QQ号码&Site ...

随机推荐

  1. react 脚手架装后 运行eject报错 的 正确运行方式

    git init git add . git commit -m 'init' npm run eject 或者 cnpm run eject

  2. StormDRPC流程解读

    Storm 的编程模型是一个有向无环图,模型角度决定了 Storm 的 Spout 接收到外部系统的请求,将请求数据分发给下游的 bolt 进行处理后,spout 并不能得到 bolt 的处理结果并将 ...

  3. java集合-把商品放入集合中调用(新手)

    //创建的一个包名. package qige; //导入的一个包.import java.util.*; //定义一个类.public class Ipcs { //公共静态的主方法. public ...

  4. python高阶函数&异常处理

    高阶函数 1.什么是高阶函数 在Python中,变量可以指向函数 函数名也是变量 既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数. ma ...

  5. 图解汉诺塔问题( Java 递归实现)

    汉诺塔简介 最近在看数据结构和算法,遇到了一个非常有意思的问题--汉诺塔问题. 先看下百度百科是怎么定义汉诺塔的规则的: 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候 ...

  6. fastjson JSONObject.toJSONString 出现 $ref: "$."的解决办法(重复引用)

    首先,fastjson作为一款序列化引擎,不可避免的会遇到循环引用的问题,为了避免StackOverflowError异常,fastjson会对引用进行检测. 如果检测到存在重复/循环引用的情况,fa ...

  7. Selenium系列(一) - 8种元素定位方式的详细解读

    安装Selenium和下载Driver 安装selenium pip3 install  selenium -i http://pypi.douban.com/simple --trusted-hos ...

  8. 使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)

    使用Jenkins与Docker持续集成与发布NetCore项目(教程一) 原文地址:https://www.cnblogs.com/Jackyye/p/12588182.html 基本环境 该教程的 ...

  9. 1+1>2:MIT&IBM提出结合符号主义和连接主义的高效、准确新模型

    自人工智能的概念提出以来,关于符号主义和连接主义的争论就不绝于耳.究竟哪一种方式可以实现更好的人工智能?这一问题目前还没有定论.深度学习的快速发展让我们看到连接主义在构建 AI 系统中的优势,但其劣势 ...

  10. 一文彻底读懂MySQL事务的四大隔离级别

    前言 之前分析一个死锁问题,发现自己对数据库隔离级别理解还不够清楚,所以趁着这几天假期,整理一下MySQL事务的四大隔离级别相关知识,希望对大家有帮助~ 事务 什么是事务? 事务,由一个有限的数据库操 ...