本文共 2312 字,大约阅读时间需要 7 分钟。
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 FuncAnimation10 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 called17 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 pass27 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.048 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.153 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_())
转载地址:http://eudxx.baihongyu.com/