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

Tkinter实现Canvas赛车循环移动及方向键调速功能咨询

实现方案

  • 循环移动实现:每次移动后读取车身右侧边界,当超过画布宽度1200时,用coords方法重置所有赛车组件到初始坐标即可实现循环
  • 按键调速实现:给主窗口绑定上下方向键事件,通过修改每次移动的步长self.x调整速度,设置最低速度限制避免赛车静止或反向移动
  • 额外添加画布焦点设置,保证键盘事件可以正常触发

完整修改后代码

# 导入tkinter模块所有内容
from tkinter import *

# 创建赛车类        
class RACECAR:
    
    def __init__(self):
        window = Tk()
        window.title("Racing Car")
        # 初始移动步长,数值越大速度越快
        self.x = 1
        self.y = 0
        # 画布宽度固定为1200,后续边界判断直接用该值
        self.canvas_width = 1200

        self.canvas = Canvas(window, width = self.canvas_width, height = 400, bg = "white")
        self.canvas.pack()
        # 给画布设置焦点,保证能接收键盘事件
        self.canvas.focus_set()
        # 绑定上下方向键事件
        window.bind("<Up>", self.increase_speed)
        window.bind("<Down>", self.decrease_speed)
        
        self.displayCar()
        window.mainloop()

    def displayCar(self):
        self.body = self.canvas.create_rectangle(0, 300, 150, 350, tags = "rect", fill = "black")
        self.wheel1 = self.canvas.create_oval(100, 350, 150, 400, tags = "oval", fill = "black")
        self.wheel2 = self.canvas.create_oval(0, 350, 50, 400, tags = "oval", fill = "black")
        self.hood = self.canvas.create_rectangle(0, 250, 100, 300, tags = "rect", fill = "black")
        self.movement()

    def movement(self):
        # 移动所有赛车组件
        self.canvas.move(self.body, self.x, self.y)
        self.canvas.move(self.wheel1, self.x, self.y)
        self.canvas.move(self.wheel2, self.x, self.y)
        self.canvas.move(self.hood, self.x, self.y)
        
        # 判断赛车是否完全移出画布
        car_right_edge = self.canvas.bbox(self.body)[2]
        if car_right_edge >= self.canvas_width:
            # 重置所有组件到初始坐标
            self.canvas.coords(self.body, 0, 300, 150, 350)
            self.canvas.coords(self.wheel1, 100, 350, 150, 400)
            self.canvas.coords(self.wheel2, 0, 350, 50, 400)
            self.canvas.coords(self.hood, 0, 250, 100, 300)
        
        self.canvas.after(100, self.movement)
    
    # 提速方法
    def increase_speed(self, event):
        self.x += 0.5
    
    # 降速方法,限制最低速度为0.5
    def decrease_speed(self, event):
        if self.x > 0.5:
            self.x -= 0.5

RACECAR()

内容的提问来源于stack exchange,提问作者Michael Aguirre

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:48:05