python canvas画移动物体_在Tkinter画布中移动球

这是一个非常基本的程序,我想做两个移动球,但只有一个真正的移动。

我也尝试过一些变体,但无法移动第二个球;另一个相关的问题-有些人使用move(object)方法来实现此目的,而其他人则使用delete(object)方法,然后重新绘制。我应该用哪一个?为什么?

这是我的代码,它只设置/移动一个球:from Tkinter import *

class Ball:

def __init__(self, canvas, x1, y1, x2, y2):

self.x1 = x1

self.y1 = y1

self.x2 = x2

self.y2 = y2

self.canvas = canvas

self.ball = canvas.create_oval(self.x1, self.y1, self.x2, self.y2, fill="red")

def move_ball(self):

while True:

self.canvas.move(self.ball, 2, 1)

self.canvas.after(20)

self.canvas.update()

# initialize root Window and canvas

root = Tk()

root.title("Balls")

root.resizable(False,False)

canvas = Canvas(root, width = 300, height = 300)

canvas.pack()

# create two ball objects and animate them

ball1 = Ball(canvas, 10, 10, 30, 30)

ball2 = Ball(canvas, 60, 60, 80, 80)

ball1.move_ball()

ball2.move_ball()

root.mainloop()

下面是一个简单的示例代码,展示了如何使用 tkintercanvas 和 PIL 库实现小人走路动。在这个示例,我们使用了三个不同的图片,分别表示小人的不同动作。 ```python from tkinter import * from PIL import Image, ImageTk class WalkingMan: def __init__(self, master): self.master = master self.canvas = Canvas(master, width=500, height=500) self.canvas.pack() # 加载小人图片 self.images = [ Image.open("walk1.png"), Image.open("walk2.png"), Image.open("walk3.png") ] self.image_tk = [ImageTk.PhotoImage(image) for image in self.images] # 在画布上创建小人 self.man = self.canvas.create_image(50, 50, image=self.image_tk[0]) # 设置定时器,每隔一段时间更新小人的位置和动作 self.current_image = 0 self.dx = 2 self.master.after(100, self.update) def update(self): # 更新小人的位置和动作 self.canvas.move(self.man, self.dx, 0) self.current_image = (self.current_image + 1) % 3 self.canvas.itemconfig(self.man, image=self.image_tk[self.current_image]) # 如果小人碰到画布边缘,改变移动方向 x1, y1, x2, y2 = self.canvas.bbox(self.man) if x2 > 500 or x1 < 0: self.dx = -self.dx # 继续更新 self.master.after(100, self.update) root = Tk() app = WalkingMan(root) root.mainloop() ``` 在这个示例,我们创建了一个 `WalkingMan` 类,它包含一个 `Canvas` 对象,用于显示小人的动。在 `__init__()` 方法,我们加载了三个不同的小人图片,并在画布上创建了一个小人对象。然后,我们设置了一个定时器,每隔一段时间更新小人的位置和动作。在 `update()` 方法,我们首先移动小人的位置,然后更新小人的动作。如果小人碰到了画布的边缘,我们会改变它的移动方向。最后,我们使用 `after()` 方法来设置下一次更新的时间,以便我们可以持续不断地更新小人的动。 如果你想要实现更复杂的动效果,你可能需要使用更多的图片,以及更复杂的逻辑来控制小人的移动和动作。不过,这个示例代码应该能够帮助你入门 tkinter canvas 和 PIL 库的基本用法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值