大连网站开发需要多少钱四川建设网官网app
大连网站开发需要多少钱,四川建设网官网app,简述网站建设优坏的评价标准,wordpress自带编辑器文章目录 0 前期教程1 概述2 matplotlib2.1 库导入2.2 图片的各个部分解释2.3 代码风格2.4 后端 3 集成matplotlib图像到pyqt界面中3.1 使用到的模块3.2 理解Qt Designer中的“控件提升”3.3 界面与逻辑分离的思路3.4 扩展 0 前期教程
【PyQt】PyQt5进阶——串口上位机及实时数… 文章目录 0 前期教程1 概述2 matplotlib2.1 库导入2.2 图片的各个部分解释2.3 代码风格2.4 后端 3 集成matplotlib图像到pyqt界面中3.1 使用到的模块3.2 理解Qt Designer中的“控件提升”3.3 界面与逻辑分离的思路3.4 扩展 0 前期教程
【PyQt】PyQt5进阶——串口上位机及实时数据显示
1 概述 在上面的前期教程中介绍了在PyQt5中如何绘制曲线是使用PyQt5的一些第三方扩展包来实现的但是提到python中的画图matplotlib才是最受欢迎的工具因此在PyQt5界面中集成一个matplotlib绘制的图非常有用。
2 matplotlib 在开始之前我们先来系统地复习一下matplotlib这个库。学习一个库首先要参考的肯定是官网——https://matplotlib.org/stable/ 如果使用这个库较多强烈建议完整看一遍Quick start guide这样会对这个库有一个整体的认识也更利于理解他人的代码。以下内容也基本摘自该教程。 2.1 库导入 首先是库导入一般采用以下这种方式
import matplotlib.pyplot as plt
import numpy as npimport matplotlib as mpl注意在一些比较老的代码中可能会看到import matplotlib.pylab as plt这样的代码这个pylab是已经被弃用的库。 2.2 图片的各个部分解释 在绘制一些相对复杂的图时首先要理解一张图片中各个部分分别对应什么这样更便于使用对应的函数以及查找相关的资料。以下这张图也摘自官网详细介绍了一张图的各个部分及其对应的类和函数非常详细值得反复阅读。 注意这里的ax来自以下代码
fig, ax plt.subplots() # Create a figure containing a single axes.
ax.plot([1, 2, 3, 4], [1, 4, 2, 3]) # Plot some data on the axes.2.3 代码风格 在绘制图像方面主要有两种常用的类型。分为显式接口(explicit interfaces) 和 隐式接口(implicit interfaces)其中所谓显式接口是使用面向对象的方式object-oriented (OO) style而隐式接口则是使用pyplot这个模块隐式地创建和管理图像和坐标轴等对象即只使用pyplot里面的函数即可。 显式接口 x np.linspace(0, 2, 100) # Sample data.# Note that even in the OO-style, we use .pyplot.figure to create the Figure.
fig, ax plt.subplots(figsize(5, 2.7), layoutconstrained)
ax.plot(x, x, labellinear) # Plot some data on the axes.
ax.plot(x, x**2, labelquadratic) # Plot more data on the axes...
ax.plot(x, x**3, labelcubic) # ... and some more.
ax.set_xlabel(x label) # Add an x-label to the axes.
ax.set_ylabel(y label) # Add a y-label to the axes.
ax.set_title(Simple Plot) # Add a title to the axes.
ax.legend() # Add a legend.
plt.show() # display隐式接口 x np.linspace(0, 2, 100) # Sample data.plt.figure(figsize(5, 2.7), layoutconstrained)
plt.plot(x, x, labellinear) # Plot some data on the (implicit) axes.
plt.plot(x, x**2, labelquadratic) # etc.
plt.plot(x, x**3, labelcubic)
plt.xlabel(x label)
plt.ylabel(y label)
plt.title(Simple Plot)
plt.legend()
plt.show() # display图片绘制方面还有更丰富的一些设置如设置线的样式styling或者在图片上增加标注labelling等具体建议参考官网的教程。 2.4 后端 所谓后端backends和网页的前端后端我认为概念上类似但又有点区别简而言之对画图而言前端即是画什么样的图而后端则是在哪画图即显示在哪。 根据官网的教程matplotlib内部有多种后端可供选择如QtGTKwxWidgetsOSXTk等分别对应的代码为qtagg, GTK4Agg, GTK3Agg, wxAgg, macosx, TkAgg。此外它还支持非内置的后端。 指定后端的方式有三种
在 matplotlibrc 文件中设置 rcParams[backend]如backend : qtagg在shell中设置 MPLBACKEND 环境变量如在Windows端执行这个代码 set MPLBACKENDqtagg在python脚本中增加代码import matplotlib matplotlib.use(qtagg) 很显然在Windows上集成图像到Qt界面上最简单的办法就是第三种。
3 集成matplotlib图像到pyqt界面中
3.1 使用到的模块 在大部分的教程中一般都会有这样几行代码
import matplotlib as mpl
mpl.use(Qt5Agg)
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure其中前两行是指定后端第三行导入的FigureCanvasQTAgg实际上也是一个Qt的控件也可以像一般的控件一样添加到Qt的窗口中它相当于是一个画布并不直接画图而第四行导入的figure就是图像本身了用于画图的各种操作。
3.2 理解Qt Designer中的“控件提升” 控件提升操作在上面的前期教程中也有使用过但是当时并没有对此理解很深入只知道这样做而已。经过对比转换得到的py代码发现所谓的控件提升其实就是替换即将放置的控件替换为其他的Qt控件比如之前的QChartView和这里的FigureCanvasQTAgg都是Qt控件所以可以直接替换。原控件的作用主要设置布局和大小等外部特性。 可以自行尝试一下拖动一个widget到窗口然后将其提升内容可以随便写再转换成python代码观察填写的内容在实际代码中的体现。 从上面的实践可以看出实际上被提升的控件是什么类型并不重要只要可以提升就行。常用的有QwidgetQFrame等。 3.3 界面与逻辑分离的思路 之所以要介绍上述的控件提升就是为在集成matplotlib图像到pyqt界面过程中也保持界面和逻辑分离的状态。 为了实现这一目标首先建立一个文件命名为FigureCanvas.py可以随便取写入以下代码
import matplotlib as mpl
mpl.use(Qt5Agg)
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figureclass MyFigure(FigureCanvas):def __init__(self, parentNone):self.fig Figure()super().__init__(self.fig)self.axes self.fig.add_subplot(111)def plot(self, *args, **kwargs):self.axes.clear() # 清除之前的图像self.axes.plot(*args, **kwargs) # 画图self.fig.canvas.draw() # 刷新画布可以看到内容非常简单就是在前面介绍的头文件基础上新建了一个类而已这个类除了初始化函数外也就只有一个刷新图像界面的函数。 然后在Qt Designer中添加一个widget控件再把它提升一下由于导入关系是from FigureCanvas import MyFigure所以类名称为MyFigure头文件为FigureCanvas。 最后就是再新建一个py文件编写逻辑和界面显示等内容了这里可以参考前期教程此处不再赘述。
3.4 扩展 在查找资料过程中还找到一个方法有点不同的教程它是使用graphicView控件来实现的是基于该控件自带的一些函数来实现的。而且也做到了界面和逻辑分离值得记录一下链接。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/87833.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!