Как создать анимацию рисования из графика функций? Tkinter, matplotlib

Здраствуйте. Я написал Десктоп-приложение в котором при нажатии график появится соответствующий график. Мне нужно чтобы его месте график рисовался медленнно, через анимацию. Много что пробовал не помогает. Полный код:

from tkinter import ttk
import numpy as np
import matplotlib as plt
from PIL import Image, ImageTk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import warnings
from matplotlib.pyplot import figure

def evaluate(event):
    # mystr = entry.get()
    # exec('f = lambda x:' + mystr, globals())
    M = float(strM.get())  # 100
    N = int(strN.get())  # 100
    l = float(strl.get())  # 1
    T = float(strT.get())  # 1
    tau = T / M
    hx = l / N
    pi = 3.14
    k = 1
    U0 = np.zeros(N)
    U1 = np.zeros(N)
    x = np.linspace(0, 1, N)

    for i in range(0, N):
        x[i] = i * hx
    for i in range(0, N):
        U0[i] = np.sin(pi * i * hx)


    while (k <= M / 1):
        # print("k=", k)
        for i in range(2, N - 2):
            U1[i] = U0[i] + (tau * U0[i] * (U0[i + 1] - U0[i])) / 2 * hx + (
                    tau * (U0[i + 2] - 2 * U0[i + 1] + 2 * U0[i - 1] - U0[i - 2])) / 2 * pow(hx, 3)
        U1[0] = U1[1] = U1[N - 1] = 0
        # for i in range(1, N - 2):
        #     if (U0[i] - U1[i]) < eps: break
        U0[:] = U1
        k = k + 1
        print(U1)

    ax.clear()  # очистить графическую область
    ax.plot(x, U1, linewidth=1)
    ax.grid(color='b', alpha=0.5, linestyle='dashed', linewidth=0.5)
    canvasAgg.draw()  # перерисовать "составной" холст


def evaluate2(event):
    root.after(100, evaluate, event)


root = Tk()
root.wm_title("Симуляция уравнения")
warnings.filterwarnings("error")
frameUp = Frame(root, relief=SUNKEN, height=125)
frameUp.pack(side=TOP, fill=X)
Label(frameUp, text="Кортевег де-Фриз теңдеуі: ").place(x=20, y=4, width=150, height=15)
Label(frameUp, text="M:").place(x=250, y=4, width=140, height=25)
Label(frameUp, text="N:").place(x=370, y=4, width=140, height=25)
Label(frameUp, text="l:").place(x=250, y=50, width=140, height=25)
Label(frameUp, text="Т:").place(x=370, y=50, width=140, height=25)

load = Image.open("1.jpg")
render = ImageTk.PhotoImage(load)
img = ttk.Label(root, image=render)
img.image = render
img.place(x=6, y=30, width=250, height=70)

strM = StringVar()
strM.set(100)
entryM = Entry(frameUp, relief=RIDGE, borderwidth=4, textvariable=strM)
entryM.place(x=280, y=30, width=80, height=25)
entryM.bind("<Return>", evaluate)

strN = StringVar()
strN.set(100)
entryN = Entry(frameUp, relief=RIDGE, borderwidth=4, textvariable=strN)
entryN.place(x=400, y=30, width=80, height=25)
entryN.bind("<Return>", evaluate)

strl = StringVar()
strl.set(1)
entryl = Entry(frameUp, relief=RIDGE, borderwidth=4, textvariable=strl)
entryl.place(x=280, y=70, width=80, height=25)
entryl.bind("<Return>", evaluate)

strT = StringVar()
strT.set(1)
entryT = Entry(frameUp, relief=RIDGE, borderwidth=4, textvariable=strT)
entryT.place(x=400, y=70, width=80, height=25)
entryT.bind("<Return>", evaluate)

#
fig = plt.figure(figsize=(5, 4), dpi=100, facecolor='white')
ax = fig.add_subplot(111)
canvasAgg = FigureCanvasTkAgg(fig, master=root)
canvasAgg.draw()
canvas = canvasAgg.get_tk_widget()
canvas.pack(fill=BOTH )

btn = Button(root, text='График')
btn.bind("<Button-1>", evaluate2)
btn.pack(ipady=2, pady=4, padx=10)

root.bind('<Control-z>', lambda event: root.destroy())
root.mainloop()

Ответы (0 шт):