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

Tkinter Canvas不显示玩家方块求助:Python新手做可移动红方块遇问题

解决Tkinter中红色方块不显示的问题

嘿,我来帮你搞定这个问题!你作为Python初学者想做个键盘控制移动的红色方块,结果运行后只看到绿色画布,方块压根没出来对吧?结合你给出的代码片段,我发现几个关键的遗漏点,咱们一步步修复它:

原代码的核心问题

  • 你的Game类的__init__方法没写完,既没创建红色方块,也没把它添加到画布上
  • 缺少键盘按键绑定的逻辑,就算方块出来了也没法控制移动
  • 没有启动Tkinter主循环的代码,程序没法正常运行

修正后的完整代码

try:
    import Tkinter
except:
    import tkinter as Tkinter
import time

__author__ = "Brano"
print(__author__)

GAME_WIDTH = 800
GAME_HEIGHT = 600
GAME_BG = 'green'
MOVE_SPEED = 10

class Game(Tkinter.Tk):
    def __init__(self, *args, **kwargs):
        Tkinter.Tk.__init__(self, *args, **kwargs)
        # 设置窗口标题
        self.title("键盘控制红色方块")
        # 创建画布
        self.canvas = Tkinter.Canvas(self, width=GAME_WIDTH, height=GAME_HEIGHT, bg=GAME_BG)
        self.canvas.pack()
        
        # 初始化红色方块的位置(画布中心)
        self.square_size = 50
        self.square_x = GAME_WIDTH // 2 - self.square_size // 2
        self.square_y = GAME_HEIGHT // 2 - self.square_size // 2
        
        # 创建红色方块并保存它的ID,方便后续移动
        self.square = self.canvas.create_rectangle(
            self.square_x, self.square_y,
            self.square_x + self.square_size, self.square_y + self.square_size,
            fill='red'
        )
        
        # 绑定键盘按键到移动方法
        self.bind("<Left>", self.move_left)
        self.bind("<Right>", self.move_right)
        self.bind("<Up>", self.move_up)
        self.bind("<Down>", self.move_down)
        
        # 让窗口获取焦点,才能捕获键盘事件
        self.focus_set()

    def move_left(self, event):
        # 向左移动,x轴减MOVE_SPEED
        self.canvas.move(self.square, -MOVE_SPEED, 0)
    
    def move_right(self, event):
        self.canvas.move(self.square, MOVE_SPEED, 0)
    
    def move_up(self, event):
        self.canvas.move(self.square, 0, -MOVE_SPEED)
    
    def move_down(self, event):
        self.canvas.move(self.square, 0, MOVE_SPEED)

# 启动游戏
if __name__ == "__main__":
    game = Game()
    game.mainloop()

关键改动说明

  • 补全了Game类的初始化方法,调用了父类的__init__,创建了画布并添加到窗口
  • 用create_rectangle创建了红色方块,并且保存了方块的ID,这样后续可以通过canvas.move来控制它的位置
  • 绑定了上下左右四个方向键到对应的移动方法,每次移动的距离就是你定义的MOVE_SPEED
  • 添加了focus_set()确保窗口能捕获键盘事件
  • 最后通过mainloop()启动Tkinter的主循环,让程序持续运行

现在运行这段代码,你就能看到画布中心的红色方块,并且可以用方向键控制它移动啦!

内容的提问来源于stack exchange,提问作者Brano Hozza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:10:22