PyQt5结合matplotlib绘图的实现示例
程序员文章站
2022-06-17 20:51:41
参考网上的例子,实现了简单的matplotlib pyqt5绘图相关知识点: (1)pyqt5中添加控件要在布局中添加 (2)布局可以使用replacewidget替换控件 (3)信号与槽机制time...
参考网上的例子,实现了简单的matplotlib pyqt5绘图
相关知识点:
(1)pyqt5中添加控件要在布局中添加
(2)布局可以使用replacewidget替换控件
(3)信号与槽机制
timer = qtcore.qtimer(self) timer.timeout.connect(self.update_figure) self.btnplot.clicked.connect(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) 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_())
参考链接:
到此这篇关于pyqt5结合matplotlib绘图的实现示例的文章就介绍到这了,更多相关pyqt5结合matplotlib内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
推荐阅读
-
Android 通过onDraw实现在View中绘图操作的示例
-
Python使用matplotlib和pandas实现的画图操作【经典示例】
-
Python实现在tkinter中使用matplotlib绘制图形的方法示例
-
Android 通过onDraw实现在View中绘图操作的示例
-
thinkPHP3.2.3结合Laypage实现的分页功能示例
-
pyqt5 实现 下拉菜单 + 打开文件的示例代码
-
pyQT5 实现窗体之间传值的示例
-
pyqt5与matplotlib的完美结合实例
-
C#结合SMTP实现邮件报警通知的实现示例
-
Nodejs+angularjs结合multiparty实现多图片上传的示例代码