Анимация Matplotlib с Funcanimate не работает после pyinstaller - PullRequest
0 голосов
/ 10 января 2020

Я пытаюсь создать приложение exe, используя Pyinstaller, но анимация не работает, просто рисует первую точку и не продолжается. Я использую matplotlib FuncAnimation, когда я запускаю скрипт из окна CMD, он просто работает нормально и анимация работает, но когда я создаю исполняемый файл, он не анимируется.

import time
import tkinter as tk
import math
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.animation

def theta(w_1,w_2):
    theta_1=list()
    theta_2=list()
    for t in np.arange(0,720,0.01):

        t_1=w_1*t
        t_1=t_1
        theta_1.append(t_1)
        t_2=w_2*t
        t_2=t_2
        theta_2.append(t_2)
    return theta_1,theta_2
#up=input("upper circle")
#down=input("lower circle")



def tup(t_1,t_2):

    x=list()
    y=list()
    for i in t_1:
        x_1=5+(math.cos(i))
        x.append(x_1)
    for j in t_2:
        y_1=5+(math.sin(j))
        y.append(y_1)
    np.asarray(x)
    np.asarray(y)
    return x,y


fig, ax = plt.subplots()
x, y =[],[]
sc = ax.scatter(x,y,c= '#bcbd22')
plt.xlim(3,7)
plt.ylim(3,7)

sc = ax.scatter(x,y)

def animate(i,m,n):

    l=m[i]
    x.append(l)
    s=n[i]
    y.append(s)
    sc.set_offsets(np.c_[x,y])





class App(tk.Frame):
    def __init__(self,master=None):
        tk.Frame.__init__(self, master)
        self.master = master
        self.pack(anchor="w")

        # Labels
        tk.Label(self, text="upper circle speed:").grid(sticky="w")
        tk.Label(self, text="lower circle speed:").grid(row=1, sticky="e")

        # Entries
        self.n_integer = tk.IntVar()
        self.p_integer = tk.IntVar()
        name = tk.Entry(self, textvariable=self.n_integer, width=30)
        passw = tk.Entry(self, textvariable=self.p_integer, width=20)
        name.grid(row=0, column=1, sticky="we")
        passw.grid(row=1, column=1, sticky="we")

        # Login Button
        login = tk.Button(self, text="Draw", command = self.login)
        login.grid(row=2, column=1, sticky="e")

    def login(self):

        user = self.n_integer.get()

        password = self.p_integer.get()

        t_1,t_2=theta(password,user)
        m,n=tup(t_1,t_2)

        ani = matplotlib.animation.FuncAnimation(fig, animate,fargs=(m,n,),
                            frames=3600, interval=40, repeat=True)
        plt.show()
        return ani


        user = self.n_integer.get()
        password = self.p_integer.get()
        print(user,password)




if __name__ == "__main__":
    root = tk.Tk()
    app  = App(root)
    root.mainloop()

...