为什么函数不被调用一次? (Python:Tkinter,Matplotlib)

我已经用Tkinter用Python编写了代码,但是有问题。

有一些代码:

main.py:

import animation as a

def draw_animation():
    copyfile(biological_system_filepath,'biological_system_parameters.tmp')
    a.create_animation()
    print('It is done.')
    os.remove('biological_system_parameters.tmp')

animation = Button(root,text='Animation',command=draw_animation,width=50)
animation.pack()

root.mainloop()

animation.py:

def create_animation():
    style.use('ggplot')
    sns.set_palette(sns.color_palette("hls",2))

    fig = plt.figure(figsize=(16,10))

    trajectory = np.loadtxt('trajectory.txt',delimiter=' ',unpack=True)
    energy = np.loadtxt('energy.txt',unpack=True)
    velocity = np.loadtxt('velocity.txt',unpack=True)

    ax1 = fig.add_subplot(2,2,(1,3),projection='3d')
    obj1,= ax1.plot(trajectory[0],trajectory[1],trajectory[2])
    biological_system = [[],[],[]]
    biological_system[0],biological_system[1],biological_system[2],biological_system[3] = np.loadtxt(
        'biological_system_parameters.tmp',unpack=True)
    ax1.plot(biological_system[0] / 10,biological_system[1] / 10,biological_system[2] / 10,'o',markersize=1)
    trajectory_xlim,trajectory_ylim,trajectory_zlim = adjust_limits3D('trajectory.txt')
    ax1.set_xlim(trajectory_xlim)
    ax1.set_ylim(trajectory_ylim)
    ax1.set_zlim(trajectory_zlim)
    ax1.set_xlabel('x[nm]')
    ax1.set_ylabel('y[nm]')
    ax1.set_zlabel('z[nm]')
    ax1.set_title('Trajektoria cząstki')

    ax2 = fig.add_subplot(2,2)
    obj2,= ax2.plot(energy[0],energy[1])
    energy_xlim,energy_ylim = adjust_limits('energy.txt')
    ax2.set_xlim(energy_xlim)
    ax2.set_ylim(energy_ylim)
    ax2.set_xlabel('t[ns]')
    ax2.set_ylabel('E[eV]')
    ax2.set_title('Wykres energii całkowitej od czasu')

    ax3 = fig.add_subplot(2,4)
    obj3,= ax3.plot(velocity[0],velocity[1])
    velocity_xlim,velocity_ylim = adjust_limits('velocity.txt')
    ax3.set_xlim(velocity_xlim)
    ax3.set_ylim(velocity_ylim)
    ax3.set_xlabel('t[ns]')
    ax3.set_ylabel('v[m/s]')
    ax3.set_title('Wykres prędkości cząstki od czasu')

    def init():
        obj1.set_data([],[])
        obj1.set_3d_properties([])

        obj2.set_data([],[])

        obj3.set_data([],[])
        return obj1,obj2,obj3,def animate(i):
        nonlocal STEP
        j = i * STEP
        if j % 1000 == 0:
            print(j)
        obj1.set_data(trajectory[0,:j],trajectory[1,:j])
        obj1.set_3d_properties(trajectory[2,:j])

        obj2.set_data(energy[0,energy[1,:j])

        obj3.set_data(velocity[0,velocity[1,:j])
        return obj1,STEP = 1000
    frames_num = math.floor(len(energy[0]) / STEP)
    ani = animation.FuncAnimation(fig,animate,init_func=init,frames=frames_num,blit=True)

    Writer = animation.writers['ffmpeg']
    writer = Writer(fps=60,metadata=dict(artist='Me'))

    ani.save('animacja.mp4',writer=writer)
    plt.show()

我不明白为什么要一遍又一遍地调用函数a.create_animation(),并且直到我单击关闭动画窗口的红色十字按钮后才打印'It is done.'。我知道一遍又一遍地调用它,因为我在j方法中打印了“ animate()”值。

示例输出:

  

0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 11000 12000 13000   14000 15000 16000 17000 18000 19000 20000 21000 22000 23000 24000   25000 26000 27000 28000 29000 30000 31000 32000 33000 34000 35000 0   1000 2000 3000 4000 5000完成。

tianyou258 回答:为什么函数不被调用一次? (Python:Tkinter,Matplotlib)

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3118295.html

大家都在问