在 python 乌龟绘图中隐藏乌龟

Hiding the turtle in python turtle drawing

我试图让它从程序开始时就隐藏起来,但即使在将 t.hideturtle() 放在我将海龟声明为变量 t 的正下方之后,海龟似乎仍然出现在图的中间。

import turtle
from random import randint

s = turtle.getscreen()
t = turtle.Turtle()
t.hideturtle()
rx = randint(50,100)
ry = randint(50,100)
width, height = 32,32
s.screensize(width, height)
s.bgcolor("black")

t.goto(0,0)
t.speed(15)

num=10
while num<=1000:
    r = randint(1,5)
    if r == 1:
        t.pencolor("white")
    elif r == 2:
        t.pencolor("#00FFFF")
    elif r == 3:
        t.pencolor("#89CFF0")
    elif r == 4:
        t.pencolor("#0000FF")
    elif r == 5:
        t.pencolor("#00FFFF")
    t.right(25)
    t.circle(num)
    num=num+10
    count=num//10
print("ran",count,"times")

这是一个棘手的问题。

这里的关键问题是您的第一个语句创建了一只乌龟,而 returns 您创建了它的屏幕。那只乌龟仍然可见。你的第二个语句创建了一个你隐藏的新海龟。将顺序更改为:

t = turtle.Turtle()
s = t.getscreen()

一切都按预期工作。

@TimRoberts 写道:

The key problem here is that your first statement creates one turtle and returns you its screen. That turtle remains visible. Your second statement creates a new turtle, which you hide.

这是混合 turtle 的 面向对象 API 和 功能性 API 的问题。如果我们将 import 更改为强制 just 面向对象的 API,并阻止功能性的,我们可以这样做:

from turtle import Screen, Turtle

screen = Screen()

turtle = Turtle()
turtle.hideturtle()

或者改为:

from turtle import Screen, Turtle

turtle = Turtle()
turtle.hideturtle()

screen = Screen()

这没什么区别。通过混合函数式 API 和面向对象的 API,您可以很容易地无意中创建此代码中未调用的 default 海龟。