PyQt5结合matplotlib绘图的实现⽰例参考⽹上的例⼦,实现了简单的matplotlib pyqt5绘图
相关知识点:
(1)pyqt5中添加控件要在布局中添加
(2)布局可以使⽤replaceWidget替换控件
(3)信号与槽机制
timer = QtCore.QTimer(self)
t(self.update_figure)
self.t(self.plotButton_callback)
实现的效果
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)
id('on')
selfpute_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)
id('on')
self.axes.plot(t, s)
class MyDynamicMplCanvas(MyMplCanvas):
"""动态画布:每秒⾃动更新,更换⼀条折线。"""
def __init__(self, *args, **kwargs):
MyMplCanvas.__init__(self, *args, **kwargs)
timer = QtCore.QTimer(self)
t(self.update_figure)
timer.start(1000)
def compute_initial_figure(self):
id('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)]
id('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.t(self.plotButton_callback)matplotlib中subplot
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)
placeWidget(self.f,dc) # 替换控件
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyApp()
<_())
到此这篇关于PyQt5结合matplotlib绘图的实现⽰例的⽂章就介绍到这了,更多相关PyQt5结合matplotlib内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论