Matplotlib植入PyQt5 + QT5的UI呈现

实现matplotlib图形通过PyQt5+Qt5在GUI中呈现步骤:

第一步,通过matplotlib.backends.backend_qt5agg类来连接PyQt5:

1 import matplotlib
2 matplotlib.use("Qt5Agg")  # 声明使用QT5
3 from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
4 from matplotlib.figure import Figure

第二步,具体图形代码实现部分,例:

 1 class Figure_Canvas(FigureCanvas):   # 通过继承FigureCanvas类,使得该类既是一个PyQt5的Qwidget,又是一个matplotlib的FigureCanvas,这是连接pyqt5与matplot                                          lib的关键
 2
 3     def __init__(self, parent=None, width=11, height=5, dpi=100):
 4         fig = Figure(figsize=(width, height), dpi=100)  # 创建一个Figure,注意:该Figure为matplotlib下的figure,不是matplotlib.pyplot下面的figure
 5
 6         FigureCanvas.__init__(self, fig) # 初始化父类
 7         self.setParent(parent)
 8
 9         self.axes = fig.add_subplot(111) # 调用figure下面的add_subplot方法,类似于matplotlib.pyplot下面的subplot方法
10
11     def test(self):
12         x = [1,2,3,4,5,6,7,8,9]
13         y = [23,21,32,13,3,132,13,3,1]
14         self.axes.plot(x, y)

第三步,GUI上通过控件呈现matplotlib画出来的图形——通过QtWidgets.QGraphicsView控件来实现:(代码部分仅呈现QtWidgets.QGraphicsView的实现步骤)

 1 self.gridLayoutWidget = QtWidgets.QWidget()
 2 self.gridLayoutWidget.setGeometry(QtCore.QRect(180, 10, 1100, 500))  # 定义gridLayout控件的大小和位置,4个数字分别为左边坐标,上边坐标,长,宽
 3 self.gridLayoutWidget.setObjectName("gridLayoutWidget")
 4 self.gridLayout_2 = QtWidgets.QGridLayout(self.gridLayoutWidget)
 5 self.gridLayout_2.setContentsMargins(0, 0, 0, 0)  # 在gridLayoutWidget 上创建一个网格Layout,注意以gridLayoutWidget为参
 6 self.gridLayout_2.setObjectName("gridLayout_2")
 7 # ===通过graphicview来显示图形
 8 self.graphicview = QtWidgets.QGraphicsView(self.gridLayoutWidget)  # 第一步,创建一个QGraphicsView,注意同样以gridLayoutWidget为参
 9 self.graphicview.setObjectName("graphicview")
10 self.gridLayout_2.addWidget(self.graphicview, 0, 0)  第二步,将该QGraphicsView放入Layout中
11
12 dr = Figure_Canvas() 实例化一个FigureCanvas
13 dr.test()  # 画图
14 graphicscene = QtWidgets.QGraphicsScene()  # 第三步,创建一个QGraphicsScene,因为加载的图形(FigureCanvas)不能直接放到graphicview控件中,必须先放到graphicScene,然后再把graphicscene放到graphicview中
15 graphicscene.addWidget(dr)  # 第四步,把图形放到QGraphicsScene中,注意:图形是作为一个QWidget放到QGraphicsScene中的
16 self.graphicview.setScene(graphicscene) # 第五步,把QGraphicsScene放入QGraphicsView
17 self.graphicview.show()  # 最后,调用show方法呈现图形!Voila!!
时间: 2024-12-13 07:26:57

Matplotlib植入PyQt5 + QT5的UI呈现的相关文章

完美配置Python3.5+Anaconda+PyQt5,实现UI和其他模块的结合

http://blog.sina.com.cn/s/blog_64e1004d0102wryn.html Python UI我感觉PyQt最强大最方便.但是Python的更新速度太快,让诸多类似库跟不上节奏. PyQt做UI早前只支持Python3.4或python2.7,但是最近有个好消息,PyQt出5.6版本了,完美支持python3.5,赶上了Python的版本更新. Anaconda配置开发环境,安装各种科学计算及神经网络库非常方便,再也不用pip install出一堆莫名其妙的错误了,

qt5的.ui文件在VS2010中无法编译问题

自己手动添加的.ui文件在VS中是无法右键编译的,也即是说,在用QT designer编辑过的.ui文件无法实时更新相应的ui_XX.h文件,造成调试结果无法显示编辑过的新界面. 解决办法: 右键.ui文件属性:改自定义生成工具,应用,在常规里按照自己相应的文件和路径输入: 命令行:setlocalD:\qt\5.5\msvc2010\bin\uic.exe  -o  "F:/AA/BB/CC/bin/ui_XX.h"  "F:/AA/BB/CC/XX.ui"if

matplotlib+pyqt4 内容整理

最近学习了matplotlib的内容,在这里做一些总结. 参考:vamei博客(Python的也可以看其教程)http://www.cnblogs.com/vamei/archive/2013/01/30/2879700.html http://reverland.org/python/2012/09/07/matplotlib-tutorial/ http://myshare.dscloud.me/scipydoc/matplotlib_intro.html#axis(这个文章很好的解释了fi

微信团队讲课笔记 Android 开发(二)UI设计

校企合作 微信团队开讲 所有章节: 第一章 Android应用设计与开发  --后面补上 第二章 UI技术研究与应用 第三章 终端网络技术 第四章 终端存储技术 第五章 Android安全开发 第六章 多终端平台技术 -------------------------------------------------------------------- 今天晚上讲的是第二章,注意!不是UI的入门教程,不是讲类的,偏重于系统原理,比较底层. 由于比较困,下面就简单写写或者列下keyword ---

Prism 框架解读之一系列

名词解释 1.什么是IOC IOC是 Inversion of Control的缩写,多数书籍翻译成“控制反转”. IOC 和依赖注入(DI) 所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中. 2. Bootstrapper: 在程序中使用框架需要找到一个切入点,将框架植入进去,将一部分功能委托给框架来实现.在Silverlight中使用Prism的切入点就是App.xaml.cs中的Application_Startup方法.一般来说,这个方法中只是指定页面最先加

当React开发者初次走进React-Native的世界

RN千机变 1.技术体系问题 RN和React共用一套抽象层,相对于前端,RN其实更接近Node的运行环境 ReactNative =React +IOS +Android 看RN文档时,我会发现入门基础那一块介绍的都是React的内容,进阶篇则介绍了很多IOS和Android的API 2.组件设计问题 Android和IOS一些设计组件是不共通的,这意味着,原本在React上只返回一个组件的情况下,RN中你可能需要判断平台分别返回两个版本的组件,为什么要这样? 因为对于许多组件,两个平台的风格

如何自己构建一个小型的Zoomeye----从技术细节探讨到实现

 0.概述 Zoomeye是个网络空间的搜索引擎,它不同于传统意义上的搜索引擎,而是一种可以搜索网络组件和网络设备的搜索引擎. 这种以各大组件指纹作为识别基础的数据平台,更多的是为了使得安全研究人员更好地评估漏洞的影响范围与其中隐含的数据模式. 1.架构分析 这是从网上搜索到的一张Zoomeye的后端架构图,主要分为调度框架.ES存储.UI呈现等模块.对于一次漏洞的评估,启动调度框架分配域名或者IP列表给扫描节点,节点完成任务后执行回调,做出自动化的效果其实也不是很难,从网上找个开源消息队列

基于multiprocessing和threading实现非阻塞的GUI界面显示

========================================================= 环境:python2.7.pyqt4.eric16.11 热点:multiprocessing.threading.GUI.pyqt 需求: 希望界面上的QTextEdit控件可以滚动刷新日志,且软件界面不可以有阻塞. ========================================================= 郑重提示:如欲转载,请注明出处. 最终实现效果如

WPF 线程 Dispatcher

WPF 应用程序从两个线程开始: 一个用于处理呈现 一个用于管理 UI 呈现线程有效地隐藏在后台运行,而UI线程则接收输入.处理事件.绘制屏幕以及运行应用程序代码. 大多数应用程序都使用一个 UI 线程,但在某些情况下,最好使用多个线程.我们将在后面举例说明这一点. UI 线程对一个名为 Dispatcher 的对象内的工作项进行排队. Dispatcher基于优先级选择工作项,并运行每一个工作项,直到完成.每个UI线程都必须至少有一个Dispatcher,并且每个 Dispatcher 都只能