使用Tkinter的简单动画(simple animation using tkinter)

2019-06-17 11:19发布

我有一个简单的代码使用的Tkinter可视化的一些数据。 A按钮点击被绑定到该重绘数据的下一个“帧”的功能。 然而,我想必须以一定的频率自动重绘的选项。 我很绿色,当涉及到GUI编程(我没有做很多关于这个代码),所以我大部分Tkinter的知识来源于以下和修改的例子。 我想我可以用root.after实现这一点,但我不能肯定我的理解是如何从其他代码。 我的方案的基本结构如下:

# class for simulation data
# --------------------------------

def Visualisation:

   def __init__(self, args):
       # sets up the object


   def update_canvas(self, Event):
       # draws the next frame

       canvas.delete(ALL)

       # draw some stuff
       canvas.create_........


# gui section
# ---------------------------------------

# initialise the visualisation object
vis = Visualisation(s, canvasWidth, canvasHeight)

# Tkinter initialisation
root = Tk()
canvas = Canvas(root, width = canvasWidth, height = canvasHeight)

# set mouse click to advance the simulation
canvas.grid(column=0, row=0, sticky=(N, W, E, S))
canvas.bind('<Button-1>', vis.update_canvas)

# run the main loop
root.mainloop()

对于问问题道歉,我敢肯定,有一个明显的和简单的答案。 非常感谢。

Answer 1:

做动画或周期性的任务,Tkinter的基本模式是编写绘制单个帧或执行单一任务的功能。 然后,使用像这样定期调用它:

def animate(self):
    self.draw_one_frame()
    self.after(100, self.animate)

一旦你一旦调用这个函数,它会继续十每秒的速度绘制帧 - 每100毫秒。 您可以修改代码以检查标志,如果你希望能够停止动画一旦开始。 例如:

def animate(self):
    if not self.should_stop:
        self.draw_one_frame()
        self.after(100, self.animate)

然后,您将有一个按钮,点击后,将self.should_stopFalse



Answer 2:

我只是想补充布莱恩的回答。 我没有足够的代表处发表评论。

另一个想法是使用self.after_cancel()停止动画。

所以...

def animate(self):
    self.draw_one_frame()
    self.stop_id = self.after(100, self.animate)

def cancel(self):
    self.after_cancel(self.stop_id)


文章来源: simple animation using tkinter