Python 3.6.2中的tracer(False)错误

时间:2018-03-26 14:38:04

标签: python-3.x graphics turtle-graphics

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

当我启用动画时,一切都运行良好,但是当我尝试切换tracer(False)以加快更高级别的度数绘图时,它似乎最后会跳过动画的一部分。

这是一个3度曲线,动画打开: deg3, animation True

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

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

deg5, animation False

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

1 个答案:

答案 0 :(得分:1)

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

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

使用python-with-science中的koch雪花示例模拟您的问题,因为您没有提供任何代码。无需重新启动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()

enter image description here

现在只需略微更改结尾:

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

# Make the last parts appear
update()

mainloop()

enter image description here