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

Python Turtle程序屏幕中央莫名箭头如何消除?

问题:Python Turtle游戏屏幕中央出现多余箭头

我已经隐藏了所有应隐藏的turtle对象,但运行程序时屏幕中央始终显示一个类似“>”的小箭头(见截图)。请求指导如何消除该箭头:

问题截图

以下是我的代码:

主程序代码

import time
from turtle import Screen
from player import Player
from car_manager import CarManager
from scoreboard import Scoreboard

play = Player()
scoreboard = Scoreboard()
car_manager = CarManager()
screen = Screen()
screen.setup(width=600, height=600)
screen.tracer(0)

screen.listen()
screen.onkey(play.turtle_move_up, "Up")

game_is_on = True
while game_is_on:
    time.sleep(0.1)
    screen.update()
    car_manager.create_car()
    car_manager.car_move()

    if play.is_at_cross_line():
        scoreboard.score_increase()
        car_manager.speed_up()
        play.move_to_starting_point()

    for car in car_manager.car_list:
        if car.distance(play) < 20:
            scoreboard.game_over()
            game_is_on = False

screen.exitonclick()

Scoreboard类

from turtle import Turtle

FONT = ("Courier", 24, "normal")

class Scoreboard(Turtle):

    def __init__(self):
        super().__init__()
        self.hideturtle()
        self.penup()
        self.level = 1
        self.score_update()

    def score_update(self):
        self.clear()
        self.goto(-260, 260)
        self.write(f"Level:{self.level}", align="left", font=FONT)

    def score_increase(self):
        self.level += 1
        self.score_update()

    def game_over(self):
        self.goto(0, 0)
        self.write("Game Over", align='center', font=FONT)

Player类

from turtle import Turtle

STARTING_POSITION = (0, -280)
MOVE_DISTANCE = 10
FINISH_LINE_Y = 280


class Player(Turtle):

    def __init__(self):
        super().__init__()
        self.penup()
        self.speed = MOVE_DISTANCE
        self.shape("turtle")
        self.move_to_starting_point()

    def move_to_starting_point(self):
        self.goto(0, -280)
        self.setheading(90)

    def turtle_move_up(self):
        self.forward(MOVE_DISTANCE)

    def is_at_cross_line(self):
        if self.ycor() > 280:
            return True
        else:
            return False

CarManager类

from turtle import Turtle
import random

COLORS = ["red", "orange", "yellow", "green", "blue", "purple"]
STARTING_MOVE_DISTANCE = 5
MOVE_INCREMENT = 10


class CarManager(Turtle):

    def __init__(self):
        super().__init__()
        self.car_list = []
        self.speed = STARTING_MOVE_DISTANCE

    def create_car(self):
        random_chance = random.randint(1,6)
        if random_chance == 1:
            new_car = Turtle("square")
            new_car.penup()
            new_car.shapesize(stretch_wid=1, stretch_len=2)
            new_car.color(random.choice(COLORS))
            new_car.goto(300, random.randint(-230, 230))
            self.car_list.append(new_car)

    def car_move(self):
        for car in self.car_list:
            car.backward(self.speed)

    def speed_up(self):
        self.speed += MOVE_INCREMENT

解决方案

问题出在CarManager类:它继承了Turtle,但这个类的作用只是管理车辆列表,本身不需要成为一个turtle对象。当你实例化CarManager时,继承自Turtle的构造函数会默认创建一个可见的turtle(就是屏幕中央的箭头),而你没有对这个对象执行hideturtle()。

修改方法很简单:让CarManager不再继承Turtle,调整类定义和初始化部分即可:

class CarManager:  # 移除(Turtle)继承
    def __init__(self):
        # 移除super().__init__()
        self.car_list = []
        self.speed = STARTING_MOVE_DISTANCE

这样CarManager就不会创建多余的turtle对象,屏幕中央的箭头会自然消失。


内容的提问来源于stack exchange,提问作者Ryan Ren

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 11:31:04