如何用tk.button引用matplotlib.animation?

时间:2017-03-26 20:02:15

标签: python animation matplotlib tkinter

我已经解决了我在this answer的帮助下如何从函数内部调用FuncAnimation的第一个问题。

答案是返回ani并在代码中保留对它的引用:

def a(...):
    # stuff
    ani = animation.FuncAnimation(...)
    # more stuff
    return ani

outer_ani = a(...)

在此示例中,引用立即在代码中,但我想在单击tkinter.Button()后引用它。

我怎么能解决这个问题? 将此引用放入另一个函数并使用Button调用此函数不起作用。

感谢您的帮助!

(对于我糟糕的英语和我愚蠢而模糊的问题,我感到很抱歉,但我不知道如何描述它更加贬低。)

编辑: 这是我的(缩短的,简化的)代码:

    root = tk.Tk()
    def a():
        fig = Figure(figsize=(4.1,8.2)) 

        def init():
            ax.set_ylim(-50, 50)
            ax.set_xlim(-50, 50)
            #more stuff

        def update(f):           
            y=50-f
            x=0
            ln.set_xdata(x)
            ln.set_ydata(y)
            return ln,

        diacan2 = FigureCanvasTkAgg(fig,master=root)
        diacan2.get_tk_widget().place(x=680,y=20)
        diacan2.show()        

        ax = fig.add_subplot(2,1,1)
        bx = fig.add_subplot(2,1,2)
        x, y = [], []
        ln, = ax.plot([], [], 'ro', animated=True) 
        ani = animation.FuncAnimation(fig, update, init_func=init, frames=100, interval=30, blit=True, repeat=False)

##################################################

tk.Button(master=root, text="bla", command=a())

1 个答案:

答案 0 :(得分:0)

另一个答案是将变量保持为全局变量,我不同意这一点。我建议你将引用作为属性保存。如果您正确设计了GUI代码,那么只需将其设为实例变量:

def a(...):
    # stuff
    self.ani = animation.FuncAnimation(...)

否则将其作为属性添加到您的tkinter窗口或任何在程序运行时使用的内容:

def a(...):
    # stuff
    root.ani = animation.FuncAnimation(...)

我必须看到你的其余代码才能给你一个更完整的答案。