如何在Tkinter中实现4个方块从屏幕中心向四角移动并消失?
解决方案:让方块从中心移动到四角并消失
先看修改后的完整代码:
from tkinter import * W, H = 500, 500 tk = Tk() canvas = Canvas(tk, width=W, height=H) canvas.pack() class Square: def __init__(self, size, speedx, speedy, color): # 计算中心位置的初始坐标:中心坐标加减size/2 center_x = W // 2 center_y = H // 2 x1 = center_x - size // 2 y1 = center_y - size // 2 x2 = center_x + size // 2 y2 = center_y + size // 2 self.square = canvas.create_rectangle(x1, y1, x2, y2, fill=color) self.speedx = speedx self.speedy = speedy self.size = size self.movement() def movement(self): canvas.move(self.square, self.speedx, self.speedy) pos = canvas.coords(self.square) # 判断方块是否完全移出屏幕 if (pos[2] < 0 or pos[0] > W) or (pos[3] < 0 or pos[1] > H): # 完全移出后删除方块并停止移动 canvas.delete(self.square) return # 继续移动 tk.after(40, self.movement) # 四个方块分别对应四个角落的移动方向,速度设为适中的5 # 左上角:左(-5)上(-5) square1 = Square(50, -5, -5, 'brown') # 右上角:右(5)上(-5) square2 = Square(50, 5, -5, 'yellow') # 右下角:右(5)下(5) square3 = Square(50, 5, 5, 'green') # 左下角:左(-5)下(5) square4 = Square(50, -5, 5, 'blue') tk.mainloop()
关键修改点说明:
- 初始位置修正:根据屏幕中心和方块尺寸计算初始坐标,确保方块从屏幕正中心开始移动
- 速度调整:把原代码中过大的速度值改成适中的5,避免移动过快
- 移除反弹逻辑:删除了原代码中让方块反弹的判断,改成检测方块是否完全移出屏幕
- 终止与清理:当方块完全移出屏幕后,删除画布上的方块并停止后续移动调用
- 方向设置:给四个方块分别设置对应角落的移动方向(正负速度组合),确保各自朝目标角落移动
内容的提问来源于stack exchange,提问作者luvs2spwge
相关产品推荐
相关产品推荐

