**
Matplotlib图画PyQt5展示
**
qt designer制作界面
保存文件名为gui.ui文件,保存后用PyUIC编译为gui.py文件
新建main.py文件用于编写逻辑文件
#!/ust/bin/python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from gui import Ui_Form #导入界面文件
import numpy as np
import matplotlib
matplotlib.use("Qt5Agg") # 声明使用QT5
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
'''
创建一个matplotlib图形绘制类,通过继承FigureCanvas类,使得该类既是一个PyQt5的Qwidget,又是一个matplotlib的FigureCanvas,这是连接pyqt5与matplotlib的关键
'''
class MyFigure(FigureCanvas):
def __init__(self,width, height, dpi):
# 创建一个Figure,该Figure为matplotlib下的Figure,不是matplotlib.pyplot下面的Figure
self.fig = Figure(figsize=(width, height), dpi=dpi)
# 在父类中**Figure窗口,此句必不可少,否则不能显示图形
super(MyFigure,self).__init__(self.fig)
# 调用Figure下面的add_subplot方法,类似于matplotlib.pyplot下面的subplot(1,1,1)方法
self.axes = self.fig.add_subplot(111)
class Mainwindow(QWidget, Ui_Form):
def __init__(self):
super(Mainwindow,self).__init__()
self.setupUi(self)
self.F = MyFigure(width=3, height=2, dpi=100)
self.countdot() #采集需要画的点位
self.plotcos(self.t,self.s) #画 图
# 在GUI的groupBox中创建一个布局,用于添加MyFigure类的实例(即图形)。
self.gridlayout = QGridLayout(self.groupBox)
self.gridlayout.addWidget(self.F)
def countdot(self):
self.t = np.arange(0.0, 5.0, 0.01)
self.s = np.cos(2 * np.pi * self.t)
# self.t = [0,1,2,3,4,5]
# self.s = [0,1,2,3,4,5]
def plotcos(self, x, y):
self.F.axes.plot(x, y)
self.F.fig.suptitle("cos")
if __name__ == '__main__':
app = QApplication(sys.argv)
main = Mainwindow()
main.show()
sys.exit(app.exec_())
运行效果