Использование matplotlibs FuncAnimation в классе от FigureCanvas - PullRequest
0 голосов
/ 11 декабря 2019

Я пытаюсь плавно перемещать точки друг от друга, используя matplotlibs FuncAnimation. При запуске этого просто нет выхода. Он даже не входит в _animate, поскольку ничего не печатается. Я действительно изо всех сил пытаюсь понять, как начать искать мою ошибку.

/ Правка: окно PyQt5 с канвой

import sys
from matplotlib.backends.backend_qt5agg import FigureCanvas
from matplotlib.figure import Figure
from matplotlib.animation import FuncAnimation
import matplotlib.pyplot as plt
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout


class Gui(QWidget):

    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        self.setGeometry(300, 300, 300, 220)
        self.setWindowTitle('Gui')
        self.verticalLayout_plot_canvas = QVBoxLayout(self)
        self.show()


class PlotCanvas(FigureCanvas):
    def __init__(self):

        self.fig = Figure()
        self.canvas = FigureCanvas(self.fig)
        self.axes = self.fig.add_subplot(111)
        self.points = self.axes.plot([], [])[0]
        self.points_array = [(0, 1), (1, 2)]

    def _animate(self, x_start, y_start, i):
        x_target, y_target = self.points_array[1]
        diff_x = x_target - x_start
        diff_y = y_target - y_start
        print(diff_x, diff_y)
        x_intermediate = diff_x / (i + 1)
        y_intermediate = diff_y / (i + 1)
        self.points.set_data(x_intermediate, y_intermediate)

    def update(self):
        x_start, y_start = self.points_array[0]
        self.anim = FuncAnimation(self.fig, self._animate, fargs=(x_start, y_start), frames=100, interval=20)

    def show(self):
        plt.show()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex = Gui()
    sys.exit(app.exec_())
    canvas = PlotCanvas()
    Gui.verticalLayout_plot_canvas.addWidget(canvas)
    canvas.update()
    canvas.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...