python - 使用 tkinter 的简单动画

标签 python user-interface animation tkinter

我有一个简单的代码可以使用 tkinter 可视化一些数据。单击按钮会绑定(bind)到重绘下一“帧”数据的函数。但是,我希望可以选择以特定频率自动重绘。在 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()

很抱歉问了一个我确信有一个明显而简单的答案的问题。非常感谢。

最佳答案

使用 Tkinter 执行动画或周期性任务的基本模式是编写绘制单个帧或执行单个任务的函数。然后,使用类似这样的方法定期调用它:

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

调用此函数一次后,它将继续以每秒 10 个帧的速率绘制帧 - 每 100 毫秒一次。如果您希望能够在动画开始后停止它,您可以修改代码以检查标志。例如:

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

然后您将有一个按钮,当单击该按钮时,将 self.should_stop 设置为 False

关于python - 使用 tkinter 的简单动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11502879/

相关文章:

python 3 : for loop syntax with dictionary

java - 如何在 Java Swing 的同一窗口中显示菜单和面板?

Python ThreadPoolExecutor 抑制异常

python - 如何使用 Selenium 从右键菜单中选择选项

仅使用 CSS 的 HTML 选项卡界面

java - java GUI 帮助 - 主线程中有错误

javascript - jQuery slideDown 函数在动画结束时垂直跳转

javascript - 如何使随机文本在悬停在按钮上时旋转,就像 google "I am feeling lucky button"一样,谁能帮我?

css - SVG 动画步进旋转

python - Pandas:在组中将值向下移动一行