我已经解决了我在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())
答案 0 :(得分:0)
另一个答案是将变量保持为全局变量,我不同意这一点。我建议你将引用作为属性保存。如果您正确设计了GUI代码,那么只需将其设为实例变量:
def a(...):
# stuff
self.ani = animation.FuncAnimation(...)
否则将其作为属性添加到您的tkinter窗口或任何在程序运行时使用的内容:
def a(...):
# stuff
root.ani = animation.FuncAnimation(...)
我必须看到你的其余代码才能给你一个更完整的答案。