为turtle.tracer(0,0)更新了Python turtle绘图

2024-09-22 16:41:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个使用python 3.2.3的新手

当我在python IDLE中运行模块时,turtle在屏幕上画了一个没有任何更新的正方形,因此窗口显示为空白,在我输入任何键后,turtle和正方形都是由于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();

Tags: 模块文档屏幕defupdatefill空白tracer
1条回答
网友
1楼 · 发布于 2024-09-22 16:41:49

有两件事对您不利:为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()

我还做了哪些是海龟法,哪些是屏风法,比较明确。turtle库最初的程序员友好设计倾向于为了便于使用而模糊它们。

相关问题 更多 >