Python 3.6.2 中的 tracer(False) 错误

tracer(False) bug in Python 3.6.2

我正在尝试使用 Turtle 库递归地绘制分形。我有一个函数 Koch(step, degree) ,它接受步长和度数;在函数内部,它使用 Koch(step/3, degree-1) 调用自身以递归构建 fractal-like 边。

启用动画后一切正常,但是当我尝试切换 tracer(False) 以加速更高级别的绘图时,它似乎在最后跳过了一部分动画。

这是一条 3 阶曲线,动画已打开:

这是相同的曲线,但 tracer(False)

无论分形的程度如何,问题仍然存在。这是 5 次曲线的输出:

我做错了什么吗?我正在尝试为动画创建一堆帧,因此我需要它们尽可能快地绘制,否则我将永远无法完成项目。

至少有几种方法可以解决这个问题。一种是在绘图结束时简单地将 tracer() 重置为其原始值。 IE。 tracer(1)。 (正如您发现的那样,为了简化操作,您可以使用 tracer(False) 隐藏绘图并使用 tracer(True) 将其重新打开。)

另一种方法是在绘图结束时调用 update()。要么强制执行最后的绘图步骤。

使用 python-with-science 中的科赫雪花示例模拟您的问题,因为您没有提供任何代码。不重新打开 tracer() 也不调用 update():

from turtle import *

def koch(distance, order):
    if order > 0:
        for angle in [60, -120, 60, 0]:
            koch(distance / 3, order - 1)
            left(angle)
    else:
        forward(distance)

# Choose size
size = 400
order = 3

# Ensure snowflake is centered
penup()
backward(size / 1.732)
left(30)
pendown()

# Make it fast
tracer(False)
hideturtle()

# Three Koch curves
for _ in range(3):
    koch(size, order)
    right(120)

mainloop()

现在稍微改变一下结局:

# Three Koch curves
for _ in range(3):
    koch(size, order)
    right(120)

# Make the last parts appear
update()

mainloop()