matplotlib PyQt5 nivigationBar 中pan和zoom功能的探索
为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功能的探索的更多相关文章
- 零元学Expression Blend 4 - Chapter 23 Deep Zoom Composer与Deep Zoom功能
原文:零元学Expression Blend 4 - Chapter 23 Deep Zoom Composer与Deep Zoom功能 最近有机会在工作上用到Deep Zoom这个功能,我就顺便介绍 ...
- WCF学习之旅—WCF4.0中的简化配置功能(十五)
六 WCF4.0中的简化配置功能 WCF4.0为了简化服务配置,提供了默认的终结点.绑定和服务行为.也就是说,在开发WCF服务程序的时候,即使我们不提供显示的 服务终结点,WCF框架也能为我们的服务提 ...
- Windows 10 版本 1507 中的新 AppLocker 功能
要查看 Windows 10 版本信息,使用[运行]> dxdiag 回车 下表包含 Windows 10 的初始版本(版本 1507)中包括的一些新的和更新的功能以及对版本 1511 的 W ...
- 禁用datagridview中的自动排序功能
把datagridview中的自动排序功能禁用自己收集的两种方法,看看吧①DataGridView中的Columns属性里面可以设置.进入"EditColumns"窗口后,在相应的 ...
- 【记录】尝试用android-logging-log4j去实现log输出内容到sd卡中的文件的功能
[背景] 折腾: [记录]给Android中添加log日志输出到文件 期间,已经试了: [记录]尝试用android中microlog4android实现log输出到文件的功能 但是不好用. 然后就是 ...
- 在Abp中集成Swagger UI功能
在Abp中集成Swagger UI功能 1.安装Swashbuckle.Core包 通过NuGet将Swashbuckle.Core包安装到WebApi项目(或Web项目)中. 2.为WebApi方法 ...
- Shepherd – 在应用程序中轻松实现引导功能
Shepherd 是一个指导用户使用应用程序的 JavaScript 库.它使用 Tether——另一个开源库,实现所有的步骤.Tether 确保你的步骤不会溢出屏幕或被剪裁.你可以很容易地指导用户使 ...
- 怎样用好ZBrush 中的映射大师功能
Projection Master可以理解为映射大师它是ZBrush®中一个独特的功能,允许在3D模型中使用2D和2.5D笔刷,用户可以利用此功能将绘制的颜色. Texture及纹理等映射到模型表面. ...
- 网页中插入QQ在线功能
网页中插入QQ在线功能 本随笔记录的是网页中如何插入qq在线聊天,这里讲解的是 普通QQ在线聊天操作. 例:第一种方式 使用 tencent://message/?uin=QQ号码&Site ...
随机推荐
- sql 语句系列(null 值处理)[八百章之第二章]
查找只存在一个表中的数据 有两张表: EMP: select * from emp DEPT: 他们有共同的属性:deptno 现在要查询EMP 中的deptno不等于DEPTNO的deptno项. ...
- 启动崩盘!IDEA 2020 无法启动的解决办法|赠送 IDEA 2020 新功能
今天早上看到 IDEA 可以升级新版本,想着体验一下新功能,点击升级,然后全部项目工程无法打开. 报错信息如下: Cannot execute command No project found to ...
- Natas12 Writeup(文件上传漏洞)
Natas12: 文件上传页面,源码如下: function genRandomString() { $length = 10; $characters = "0123456789abcde ...
- 如何使用Postman编写Testlink测试用例
Postman2Testlink 通过Postman快速操作testlink测试用例.测试套件.测试计划.添加关键词.添加自定义字段等等. 工具地址 https://github.com/liyinc ...
- CodeMixer工具,完美替代ChaosTool,iOS添加垃圾代码工具,代码混淆工具,代码生成器,史上最好用的垃圾代码添加工具,自己开发的小工具
新工具 ProjectTool 已上线 这是一款快速写白包工具,秒级别写H5游戏壳包,可视化操作,极易使用,支持Swift.Objecive-C双语言 扣扣交流群:811715780 进入 Proje ...
- System.Text.Json 序列化对所有 JSON 属性名称使用 camel 大小写
asp.net core3.x 新增的序列号接口System.Text.Json 序列化时,如果要对所有 JSON 属性名称使用 camel 大小写 将 JsonSerializerOptions.P ...
- Flutter 实现不同样式(有样式) 的TextField (可自定义),类似微博#话题#、@用户,(给TextField加TextSpan)
描述 先上效果图 在项目中,有 @ 和 话题功能,需要在编辑时即可回显,但是官方原生的TextField不支持对部分文字定义不同的样式,所以封装了一个. 注意:这不是富文本插件,不支持在输入框中显示图 ...
- hdu1078 dfs+dp(记忆化搜索)搜索一条递增路径,路径和最大,起点是(0,0)
#include<bits/stdc++.h> using namespace std; typedef unsigned int ui; typedef long long ll; ty ...
- 用c写的简单的日历(学习模块划分)
简单日历 主要目的是学习函数模块划分,成品大概是这样,加了一些花里胡哨的东西(/▽\) 分三个模块,主函数.c 显示.c 计算.c 与.h 文件 有两种实现方式,区别在于是否以数组在模块之间传 ...
- Flutter 强大的MediaQuery控件
注意:无特殊说明,Flutter版本及Dart版本如下: Flutter版本: 1.12.13+hotfix.5 Dart版本: 2.7.0 MediaQuery 通常情况下,不会直接将MediaQu ...