Я пытаюсь плавно перемещать точки друг от друга, используя 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()