Я пытаюсь создать приложение 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()