Python Pyqt Matplotlib工具画图(1)Eric6 图形界面编程 第3例

环境:Eric6+Qt5.7+PyQt5.7 Ubuntu18.04

        安装方法请看我之前的博客,之所以在ubuntu下开发,因为大部分服务器都使用Linux系统,因此在windows下编写的各种程序适用范围较窄,而且最终还是要迁移到linux上去。文中尽量隐去大量的术语,用比较浅显易懂的语言来描述。照顾刚接触python编程的朋友。

        我们开始前需要用PIP3安装一个库,Matplotlab。这个是一个著名的Python图形库。可以做出各式各样的图表。

        pip3 install matplotlib

 Python Pyqt Matplotlib工具画图(1)Eric6 图形界面编程 第3例_第1张图片

         我们进入eric6,建立项目,使用Qt desinger设计界面。上面两例都有详细的步骤,不赘述了。建立一个 Main Window。

 Python Pyqt Matplotlib工具画图(1)Eric6 图形界面编程 第3例_第2张图片

        加入两个按钮控件和一个widget窗体部件,并将按钮控件标签改为:start,stop。

Python Pyqt Matplotlib工具画图(1)Eric6 图形界面编程 第3例_第3张图片

         右击widget控件,选择Promoted widgets... 进行提升。

 Python Pyqt Matplotlib工具画图(1)Eric6 图形界面编程 第3例_第4张图片

        在弹出的对话框里 Base class name 选择Qwidget 其他的照下图填写,class name其实可以随便起的,但是要和之后建立的文件相对应。然后选择add加入。出现下图上半部分的结果即可,最后Promote提交。

Python Pyqt Matplotlib工具画图(1)Eric6 图形界面编程 第3例_第5张图片

        做完后将其保存并导入项目。

Python Pyqt Matplotlib工具画图(1)Eric6 图形界面编程 第3例_第6张图片

       下面我们建立一个刚才导入同名的文件:Matplotlibwidget.py 并将其导入项目。顺便生成下按钮单击的事件也就是文件 lesson3.py 。(怎么生成往前面的章节翻)

Python Pyqt Matplotlib工具画图(1)Eric6 图形界面编程 第3例_第7张图片

         最后的结果应该如下图所示。

      前期操作结束,下面我们开始编写Matplotlibwidget.py文件。我们所有绘图的工作都在这里完成。可以看成一个绘图的母版。我们着重讲讲这个母版。下面是文件的源代码。

import sys 
import matplotlib       #导入matplotlib 
matplotlib.use("Qt5Agg")     #声明 matplotlib 使用的是Qt5的库
from PyQt5 import QtCore        
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QSizePolicy, QWidget 
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas 
from PyQt5.QtCore import QTimer     #为了后面加载的计时器控件
import random   #随机数
import numpy as np    #matplotlib 使用 numpy 进行数组运算 因为numpy太长了 取别名为np
import matplotlib.pyplot as plt   #这个是最重要的画图控件
from scipy import interpolate  #导入差值,后面用的到。

class MyMplCanvas(FigureCanvas):   
#MyMplCanvas 继承了FigureCanvas类,主要用来连接Pyqt与matplotlib。
        def __init__(self, parent=None, width=5, height=4, dpi=100): 
            self.fig = plt.Figure(figsize=(width, height), dpi=dpi)  
#建立figure类的对象 flg, Figure可以看做一个画板,所有的图都要画在画板上。
            self.axes = self.fig.add_subplot(111)
#建立对象 axes 这里的 (111)其实是切分图形的方法,可以将一个画板下分隔出很多的小作图区。我们后面详细说

            FigureCanvas.__init__(self, self.fig)   #将父类初始化
            self.setParent(parent) 
        
            FigureCanvas.setSizePolicy(self, QSizePolicy.Expanding, QSizePolicy.Expanding) 
#这个主要是将后端的绘图功能同Qt的布局管理器衔接上。以免出现布局上的错误。简单的说,就是widget大的时候,图就大,widget小的时候图就跟着小。实时变化要跟下面的代码同时使用。
            FigureCanvas.updateGeometry(self) 
#这个updateGeometry 主要是在widget有改变的时候,绘图跟着改变。不然你widget拖大了,绘图还是那么小。。。
            
class Matplotlibwidget(QWidget): 
# 定义Matplotlibwidget类继承了QWidget类,绘图的主代码写在这个类里。
        def __init__(self, parent=None): 
#不指定父子类关系,布局管理器统一管理。
            super(Matplotlibwidget, self).__init__(parent)   #继承父类
            self.initUi() 
            
        def initUi(self):   #对绘制的图形进行布局,并生成MyMplCanvas对象。
            self.layout = QVBoxLayout(self) 
            self.mpl = MyMplCanvas(self, width=15, height=15, dpi=100) 
            self.layout.addWidget(self.mpl) 
            
        def plot(self):  #网上抄的画图,两条曲线。
            X = np.linspace(-np.pi, np.pi, 256,endpoint=True)
# X是一个数组,从 -3.14 到  +3.14 一共有256个取值点的等差数组,用linspace实现。endpoint是否包含终值。
            C, S=np.cos(X), np.sin(X)
# 计算cos 和 sin 的值分别将其插入X数组中,形成新的数组用来定义Y轴。
            self.mpl.axes.plot(X,C)   #生成COS图
            self.mpl.axes.plot(X,S)   #生成SIN图
            self.mpl.draw()   将图形输出到界面上
            
        def clear_plot(self):
            self.mpl.axes.cla()  #清除全部绘图
            self.mpl.draw()       #将清除后的图输出到界面。

        最后把两个函数绑定到两个按钮上。写上启动代码在lesson3.py里。并将项目配置里的主脚本设置为 lesson3.py。

        代码大概是这样

Python Pyqt Matplotlib工具画图(1)Eric6 图形界面编程 第3例_第8张图片

        执行后 点击start 绘制图形,stop 清空。

Python Pyqt Matplotlib工具画图(1)Eric6 图形界面编程 第3例_第9张图片

你可能感兴趣的:(eric6,PYTHON,eric,matplotlib,python,GUI,绘图)