有几种解决方法,但是有没有办法以类似的方式运行此代码?
import time
import tkinter as tk
root = tk.Tk()
...canvas stuff...
class thing():
def __init__(self, canvas):
self.id = canvas.create_oval(...)
def something(self):
canvas.delete(self.id)
self.id = canvas.create_oval(...)
canvas.move(self.id, 10, 0)
t = thing()
while True:
t.something()
root.update_idletasks()
root.update()
time.sleep(0.01)
上面的脚本应该使一个圆成为动画,但不是。 (顺便说一句)我不是在寻找一种方法来修复此代码。
是否可以动态创建对象名称(动态替换self.id)?
答案 0 :(得分:0)
您应该编写执行动画一帧的功能。然后,使用after
按计划运行该命令。
这是一个非常基本的示例:
import tkinter as tk
root = tk.Tk()
canvas = tk.Canvas(root, width=400, height=400)
canvas.pack(fill="both", expand=True)
class thing():
def __init__(self, canvas):
self.canvas = canvas
self.id = canvas.create_oval(10, 10, 20, 20, outline="red", fill="red")
def animate(self):
self.canvas.move(self.id, 10, 10)
self.canvas.after(100, self.animate)
t = thing(canvas)
t.animate()
root.mainloop()
当然,您需要添加其他代码才能停止动画,或者在对象遇到边缘或离开屏幕时对其进行更改,等等。但这说明了一般原理。在animate
中,您可以添加所需的任何其他逻辑。