Внедрение анимации matplotlib в раму tkinter

Для проекта я работаю над простым симулятором гармонического движения (как масса колеблется со временем). Я получил данные правильно и уже имеет график, созданный в рамках работы tkinter. На данный момент он показывает только статический график, где моя цель – отображать график как анимацию с течением времени.

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

#---------Imports from numpy import arange, sin, pi from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg from matplotlib.figure import Figure import tkinter as Tk from tkinter import ttk import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation #---------End of imports fig, ax = plt.subplots() x = np.arange(0, 2*np.pi, 0.01) # x-array line, = ax.plot(x, np.sin(x)) def animate(i): line.set_ydata(np.sin(x+i/10.0)) # update the data return line, ani = animation.FuncAnimation(fig, animate, np.arange(1, 200), interval=25, blit=False) #plt.show() #What I want the object in tkinter to appear as root = Tk.Tk() label = ttk.Label(root,text="SHM Simulation").grid(column=0, row=0) canvas = FigureCanvasTkAgg(fig, master=root) canvas.show() canvas.get_tk_widget().grid(column=0,row=1) Tk.mainloop() 

Этот код отобразит анимацию, которую я хочу в раме tkinter, когда plt.show () раскоментирован. Я хотел бы разместить эту анимацию в рамках tkinter.

Я также был на сайте matplotlib и просмотрел все примеры анимации, и ни один из них не помог. Я также рассмотрел вопрос «21179971» на этом веб-сайте и разместил кнопку tkinter в фигуре pyplot, в то время как я хотел бы поместить фигуру в рамку tkinter.

Поэтому просто для уточнения, я хотел бы иметь возможность разместить анимацию, созданную, когда «# plt.show ()» раскомментирован в кадре tkinter, т. Е. (Root = tk ())

Я изменил ваш код:

 #---------Imports from numpy import arange, sin, pi from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg from matplotlib.figure import Figure import Tkinter as Tk import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation #---------End of imports fig = plt.Figure() x = np.arange(0, 2*np.pi, 0.01) # x-array def animate(i): line.set_ydata(np.sin(x+i/10.0)) # update the data return line, root = Tk.Tk() label = Tk.Label(root,text="SHM Simulation").grid(column=0, row=0) canvas = FigureCanvasTkAgg(fig, master=root) canvas.get_tk_widget().grid(column=0,row=1) ax = fig.add_subplot(111) line, = ax.plot(x, np.sin(x)) ani = animation.FuncAnimation(fig, animate, np.arange(1, 200), interval=25, blit=False) Tk.mainloop()