服务器之家

服务器之家 > 正文

PyQt5结合matplotlib绘图的实现示例

时间:2020-09-16 00:24     来源/作者:落叶_小唱

参考网上的例子,实现了简单的matplotlib pyqt5绘图 

相关知识点:
 (1)pyqt5中添加控件要在布局中添加
 (2)布局可以使用replaceWidget替换控件
 (3)信号与槽机制

?
1
2
3
4
timer = QtCore.QTimer(self)
timer.timeout.connect(self.update_figure)
 
self.btnPlot.clicked.connect(self.plotButton_callback)

实现的效果

PyQt5结合matplotlib绘图的实现示例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import sys
from PyQt5 import QtCore, QtGui, uic
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QMessageBox, QVBoxLayout, QSizePolicy, QWidget
 
from PyQt5.QtGui import QIcon
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
import numpy as np
 
qtCreatorFile = "matplotlib_ui.ui"
# 使用uic加载
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)
 
class MyMplCanvas(FigureCanvas):
  """这是一个窗口部件,即QWidget(当然也是FigureCanvasAgg)"""
  def __init__(self, parent=None, width=5, height=4, dpi=100):
    fig = Figure(figsize=(width, height), dpi=dpi)
    self.axes = fig.add_subplot(111)
    # 每次plot()调用的时候,我们希望原来的坐标轴被清除(所以False)
    self.axes.hold(False)
    self.axes.grid('on')
 
    self.compute_initial_figure()
 
    #
    FigureCanvas.__init__(self, fig)
    self.setParent(parent)
 
    FigureCanvas.setSizePolicy(self,
                  QSizePolicy.Expanding,
                  QSizePolicy.Expanding)
    FigureCanvas.updateGeometry(self)
 
  def compute_initial_figure(self):
    pass
 
class MyStaticMplCanvas(MyMplCanvas):
  """静态画布:一条正弦线"""
  def compute_initial_figure(self):
    t = np.arange(0.0, 3.0, 0.01)
    s = np.sin(2 * np.pi * t)
    self.axes.grid('on')
    self.axes.plot(t, s)
 
 
class MyDynamicMplCanvas(MyMplCanvas):
  """动态画布:每秒自动更新,更换一条折线。"""
  def __init__(self, *args, **kwargs):
    MyMplCanvas.__init__(self, *args, **kwargs)
    timer = QtCore.QTimer(self)
    timer.timeout.connect(self.update_figure)
    timer.start(1000)
 
  def compute_initial_figure(self):
    self.axes.grid('on')
    self.axes.plot([0, 1, 2, 3], [1, 2, 0, 4], 'r')
 
  def update_figure(self):
    # 构建4个随机整数,位于闭区间[0, 10]
    l = [np.random.randint(0, 10) for i in range(4)]
    self.axes.grid('on')
    self.axes.plot([0, 1, 2, 3], l, 'r')
    self.draw()
 
class MyApp(QMainWindow, Ui_MainWindow):
 
  def __init__(self):
    QMainWindow.__init__(self)
    Ui_MainWindow.__init__(self)
    super().__init__()
 
    self.initUI()
    self.initBtn()
    self.initFrame()
 
  def initFrame(self):
    self.main_widget = self.frame
    self.layout = QVBoxLayout(self.main_widget)
    self.f = MyMplCanvas(self.main_widget)
    self.layout.addWidget(self.f)
 
  def initUI(self):       
 
    self.setupUi(self)
    self.setWindowTitle("PyQt5结合Matplotlib绘图")
    self.setWindowIcon(QIcon("rocket.ico"))  # 设置图标,linux下只有任务栏会显示图标
 
    self.show()
 
  def initBtn(self):
    self.btnPlot.clicked.connect(self.plotButton_callback)
    self.btnPlot.setToolTip("Button")    
 
  def plotButton_callback(self):
 
    self.drawFrame()
 
  def drawFrame(self):
 
    sc = MyStaticMplCanvas(self.main_widget, width=5, height=4, dpi=100)
    dc = MyDynamicMplCanvas(self.f, width=5, height=4, dpi=100)
    self.layout.addWidget(sc)
    self.layout.replaceWidget(self.f,dc) # 替换控件
 
if __name__ == '__main__':
 
  app = QApplication(sys.argv)
  ex = MyApp()
  sys.exit(app.exec_())

参考链接:https://www.cnblogs.com/hhh5460/p/4322652.html

到此这篇关于PyQt5结合matplotlib绘图的实现示例的文章就介绍到这了,更多相关PyQt5结合matplotlib内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/ouening/article/details/79595266

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享 2020-04-07
电视剧《琉璃》全集在线观看 琉璃美人煞1-59集免费观看地址
电视剧《琉璃》全集在线观看 琉璃美人煞1-59集免费观看地址 2020-08-12
最新idea2020注册码永久激活(激活到2100年)
最新idea2020注册码永久激活(激活到2100年) 2020-07-29
返回顶部