PyQt5はmatplotlibアニメーションを埋め込みます



Pyqt5 Embeds Matplotlib Animation



 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, , , 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, , , 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_())