Я нашел этот поток , но мой случай немного отличается, так как я хочу, чтобы мой график существовал в отдельном окне, поэтому создал следующий класс:
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 никогда не останавливает то, что заставляет меня думать, что анимация никогда не запускалась. Любой намек на то, что я здесь упустил или сделал не так?