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
相关产品推荐
相关产品推荐

