You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 18:21:33