Анимация Matplotlib в Tkinter TopLevel не работает - PullRequest
0 голосов
/ 29 апреля 2020

Я нашел этот поток , но мой случай немного отличается, так как я хочу, чтобы мой график существовал в отдельном окне, поэтому создал следующий класс:

import tkinter as tk
import random

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib import pyplot, animation

class Graphs(tk.Toplevel):

    sensor_data = []
    steps = []

    def __init__(self, master): # master here is my root tk window
        super().__init__(master)
        self.title("Plot me some data")

        self.figure = pyplot.figure(dpi=150)
        self.sensor = figure.subplots(1, 1, 1)

        self.sensor.grid(True)
        self.line, = self.sensor.plot(self.steps, self.sensor_data)

        self.canvas = FigureCanvasTkAgg(figure, self)
        self.canvas.get_tk_widget().grid(column=0, row=0)

    def animate(self):
        ani = animation.FuncAnimation(self.figure, self.animation, fargs=(self,), blit=False, interval=1000)


    """
    This is a dumb logic to visualise if animation FuncAnimation is working
    """
    @staticmethod
    def animation(i, self):
        self.steps.append(i)
        self.sensor_data.append(self.steps[-1] * random.randint(-5, 5))
        self.line.set_data(self.steps, self.sensor_data[-1])

и из основного контроллера Я называю это как:

    self.graphs = Graphs(self)
    self.graphs.animate()

Так как анимация не работает, я потерялся. Попытка отладить точку останова установки кода в анимационной функции logi c никогда не останавливает то, что заставляет меня думать, что анимация никогда не запускалась. Любой намек на то, что я здесь упустил или сделал не так?

1 Ответ

0 голосов
/ 30 апреля 2020

Наконец, я обнаружил, что было неправильно - переменная ani должна быть явно членом self, поэтому строка:

    self.ani = animation.FuncAnimation(self.figure, self.animation, fargs=(self,), blit=False, interval=1000)

исправляет поврежденную анимацию, когда она определена в отдельном классе и представлена ​​в Tk TopLevel .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...