zoukankan      html  css  js  c++  java
  • PyQt5嵌入matplotlib动画

     1 # -*- coding: utf-8 -*-
     2 
     3 import sys
     4 from PyQt5 import QtWidgets
     5 
     6 import numpy as np
     7 from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
     8 from matplotlib.figure import Figure
     9 from matplotlib.animation import FuncAnimation
    10 
    11 class MyMplCanvas(FigureCanvas):
    12     """Ultimately, this is a QWidget (as well as a FigureCanvasAgg, etc.)."""
    13     def __init__(self, parent=None, width=5, height=4, dpi=100):
    14         fig = Figure(figsize=(width, height), dpi=dpi)
    15         self.axes = fig.add_subplot(111)
    16         # We want the axes cleared every time plot() is called
    17         self.axes.hold(False)
    18 
    19         self.compute_initial_figure()
    20 
    21         #
    22         FigureCanvas.__init__(self, fig)
    23         self.setParent(parent)
    24 
    25     def compute_initial_figure(self):
    26         pass
    27 
    28 class AnimationWidget(QtWidgets.QWidget):
    29     def __init__(self):
    30         QtWidgets.QWidget.__init__(self)
    31 
    32         vbox = QtWidgets.QVBoxLayout()
    33         self.canvas = MyMplCanvas(self, width=5, height=4, dpi=100)
    34         vbox.addWidget(self.canvas)
    35         
    36         hbox = QtWidgets.QHBoxLayout()
    37         self.start_button = QtWidgets.QPushButton("start", self)
    38         self.stop_button = QtWidgets.QPushButton("stop", self)
    39         self.start_button.clicked.connect(self.on_start)
    40         self.stop_button.clicked.connect(self.on_stop)
    41         hbox.addWidget(self.start_button)
    42         hbox.addWidget(self.stop_button)
    43         vbox.addLayout(hbox)
    44         self.setLayout(vbox)
    45         
    46         self.x = np.linspace(0, 5*np.pi, 400)
    47         self.p = 0.0
    48         self.y = np.sin(self.x + self.p)
    49         self.line, = self.canvas.axes.plot(self.x, self.y, animated=True, lw=2)
    50         
    51     def update_line(self, i):
    52         self.p += 0.1
    53         y = np.sin(self.x + self.p)
    54         self.line.set_ydata(y)
    55         return [self.line]
    56         
    57     def on_start(self):
    58         self.ani = FuncAnimation(self.canvas.figure, self.update_line, 
    59                                  blit=True, interval=25)
    60     
    61     def on_stop(self):
    62         self.ani._stop()
    63 
    64 if __name__ == "__main__":
    65     qApp = QtWidgets.QApplication(sys.argv)
    66     aw = AnimationWidget()
    67     aw.show()
    68     sys.exit(qApp.exec_())

  • 相关阅读:
    UVA 10618 Tango Tango Insurrection
    UVA 10118 Free Candies
    HDU 1024 Max Sum Plus Plus
    POJ 1984 Navigation Nightmare
    CODEVS 3546 矩阵链乘法
    UVA 1625 Color Length
    UVA 1347 Tour
    UVA 437 The Tower of Babylon
    UVA 1622 Robot
    UVA127-"Accordian" Patience(模拟)
  • 原文地址:https://www.cnblogs.com/ansang/p/9010194.html
Copyright © 2011-2022 走看看