c/c++语言开发共享PyQt5结合matplotlib绘图的实现示例

参考网上的例子,实现了简单的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)

实现的效果

PyQt5结合matplotlib绘图的实现示例

  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内容请搜索<计算机技术网(www.ctvol.com)!!>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<计算机技术网(www.ctvol.com)!!>!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/597550.html

(0)
上一篇 2021年5月8日
下一篇 2021年5月8日

精彩推荐