我是使用python 3.2.3的新手

当我在python IDLE中运行模块时,乌龟在屏幕上绘制了一个没有任何更新的正方形,因此窗口显示为空白,并且在我输入了任何键之后,由于调用turtle.update(),乌龟和正方形出现了)。

但是,当我双击将以下代码存储在文档中的.py文件并直接执行该文件时,在输入任何键之前,总是会显示该正方形。

有趣的是没有显示乌龟,而仅显示了正方形。

即使我已经将Turtle Tracer设置为(0,0),似乎在绘制后仅对正方形进行了一次Turtle更新。

这被视为错误,我该如何解决?谢谢您的帮助。



import turtle

def drawSquare():
    turtle.down();
    turtle.begin_fill();
    turtle.goto(10, 0);
    turtle.goto(10, 10);
    turtle.goto(0, 10);
    turtle.goto(0, 0);

    turtle.end_fill();
    turtle.up();

def tUpdate():
    turtle.update();

turtle.tracer(0,0);
drawSquare();
input("Not updated. Press any key.");
tUpdate();
print("Updated");
turtle.mainloop();

最佳答案

您遇到了许多不利于您的事情:tracer()提供的文档不足以及end_fill()up()导致更新发生的事实。 tracer()并不是真正要向用户隐藏事物,直到您准备将它们显示出来–它是一种速度优化,因此用户不必在复杂的图像中看到每个绘制步骤。您无法完全控制何时进行更新。

这是您的示例的重做,显示了所需的行为,但又不再是一个正方形。我将您的input()触发器换成了在窗口上的鼠标单击,但是您的方法在这里也同样适用:

from turtle import Turtle, Screen

def drawSquare(turtle):
    turtle.goto(100, 0)
    turtle.goto(100, 100)
    turtle.goto(0, 100)
    turtle.goto(0, 0)

screen = Screen()

screen.tracer(0, 0)

screen.onclick(lambda x, y: screen.update())

turtle = Turtle()

drawSquare(turtle)

screen.mainloop()


我也更明确地说明了哪些是乌龟方法,哪些是屏幕方法。为了易于使用,乌龟库的程序员起初的友好设计趋于使这些模糊。

10-01 10:49
查看更多