python之把animation的动态图嵌入pyqt5的界面中

# -*- coding: utf-8 -*-
'''
python技巧之把animation的动态图嵌入pyqt5的界面中
'''

import sys
import numpy as np

from PyQt5 import QtWidgets, QtCore
from PyQt5.QtWidgets import QApplication, QMainWindow, QMenu, QVBoxLayout, QSizePolicy, QMessageBox, QWidget, \
    QPushButton, QLabel, QLineEdit, QHBoxLayout
from PyQt5.QtGui import QIcon, QPalette
from PyQt5.QtCore import QObject, Qt

import matplotlib
matplotlib.use('Qt5Agg')
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
from matplotlib import animation


n = 0


class App(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        self.setWindowTitle('就想有个标题')
        self.main_widget = QWidget(self)

        hBox = QHBoxLayout(self.main_widget)  # 横着布局
        vBox = QVBoxLayout(self.main_widget)  # 竖着布局

        self.canvas = Csi_plot(self.main_widget, width=5, height=4, dpi=100)
        vBox.addWidget(self.canvas)

        self.start_button = QPushButton('start', self)
        self.stop_button = QPushButton('stop', self)
        self.exit_button = QPushButton('exit', self)
        self.start_button.clicked.connect(self.on_start)
        self.stop_button.clicked.connect(self.on_stop)
        self.exit_button.clicked.connect(self.on_exit)
        hBox.addWidget(self.start_button)
        hBox.addWidget(self.stop_button)
        hBox.addWidget(self.exit_button)

        self.label = QLabel('

?

', self) # vBox.addWidget(self.label) self.label.setGeometry(0, 0, 120, 30) self.label.setAlignment(Qt.AlignCenter) self.label_1 = QLabel('

速度设置:

', self) self.label_1.setGeometry(0, 50, 120, 30) self.linEdit = QLineEdit('2000', self) self.linEdit.setGeometry(90, 50, 120, 30) # 改变控件的颜色 self.label.setAutoFillBackground(True) global palette_red, palette_green palette_red = QPalette() palette_green = QPalette() palette_red.setColor(QPalette.Window, Qt.red) palette_green.setColor(QPalette.Window, Qt.green) hBox.addLayout(vBox) self.setLayout(hBox) self.main_widget.setFocus() self.setCentralWidget(self.main_widget) self.scat, = self.canvas.axes.plot([], [], lw=2) self.show() def update_function(self, i): global n if n % 2 == 0: x = np.linspace(0, 2, 1000) y = 5 * np.sin(10 * np.pi * (x - 0.01 * i)) self.scat.set_color('r') self.label.setText('

还是优秀也

') self.label.setPalette(palette_red) else: x = np.linspace(-200, 200, 100) y = np.sin(2 * np.pi * (x - 0.01 * i)) self.scat.set_color('b') self.label.setText('

独秀

') self.label.setPalette(palette_green) self.scat.set_data(x, y) n += 1 return self.scat, def on_start(self): self.ani = animation.FuncAnimation(self.canvas.figure, self.update_function, frames=200, blit=True, interval=int(self.linEdit.text())) def on_stop(self): self.ani._stop() def on_exit(self): self.close() def closeEvent(self, event): reply = QMessageBox.question(self, 'Exit', 'Are you sure to exit?', QMessageBox.Yes | QMessageBox.Cancel) if reply == QMessageBox.Yes: event.accept() else: event.ignore() class Csi_plot(FigureCanvas): def __init__(self, parent=None, width=5, height=4, dpi=100): fig = Figure(figsize=(width, height), dpi=dpi) self.axes = fig.add_subplot(111) self.ax = fig.add_subplot(111) self.ax.set_xlim(0, 2) self.ax.set_ylim(-6, 6) self.ax.grid(True) FigureCanvas.__init__(self, fig) self.setParent(parent) FigureCanvas.setSizePolicy(self, QSizePolicy.Expanding, QSizePolicy.Expanding) FigureCanvas.updateGeometry(self) if __name__ == '__main__': app = QApplication(sys.argv) ex = App() sys.exit(app.exec_())

我曾经跨过山和大海,也穿过人山人海,我曾经拥有着的一切,转眼都飘散如烟,我曾经失落失望失掉所有方向,直到看见平凡才是唯一的答案。
——韩寒《平凡之路》

你可能感兴趣的:(pyqt5)