您可以在一个循环中创建多个项目。将项目 ID 保存在列表中,然后您可以遍历项目以移动它们。
这是一个示例,它在随机位置创建 100 个具有随机颜色的项目,然后在每次迭代中以随机数量为它们设置动画。
import tkinter as tk
import random
root = tk.Tk()
canvas = tk.Canvas(root, bg="black", width=400, height=400)
canvas.pack(fill="both", expand=True)
items = []
for i in range(100):
x = random.randint(10, 490)
y = random.randint(10, 490)
size = random.randint(20,50)
color = random.choice(("red", "orange", "green", "blue", "white", "yellow"))
item_id = canvas.create_rectangle(x, y, x+size, y+size, fill=color, outline="white")
items.append(item_id)
def animate():
for item_id in items:
distance = random.randint(0, 5)
canvas.move(item_id, 0, distance)
canvas.after(100, animate)
animate()
root.mainloop()
这是一种面向对象的方法,我们使用一个类来定义一个项目,并且类实例可以为自己设置动画。
import tkinter as tk
import random
class RandomItem:
def __init__(self, canvas):
self.canvas = canvas
self.velocity = random.randint(1,5)
x = random.randint(10, 490)
y = random.randint(10, 490)
size = random.randint(20,50)
color = random.choice(("red", "orange", "green", "blue", "white", "yellow"))
self.item_id = canvas.create_rectangle(x, y, x+size, y+size, fill=color)
self.fall()
def fall(self):
self.canvas.move(self.item_id, 0, self.velocity)
self.canvas.after(100, self.fall)
root = tk.Tk()
canvas = tk.Canvas(root, bg="black", width=500, height=500)
canvas.pack(fill="both", expand=True)
for i in range(100):
item = RandomItem(canvas)
root.mainloop()