【问题标题】:tracer(False) bug in Python 3.6.2Python 3.6.2 中的 tracer(False) 错误
【发布时间】:2018-03-26 14:38:03
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 请考虑添加代码示例,或修改您在此问题中发布的示例。就目前而言,它的格式和范围使我们很难为您提供帮助;这是一个great resource,可以帮助您开始。祝你的代码好运!
  • 对不起,我没有包含任何代码 sn-ps;我还是编程新手,尤其是 Stack Overflow。似乎其他人仍然能够帮助我解决我的问题。

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


【解决方案1】:

至少有几种方法可以解决此问题。一种是在绘图结束时简单地将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()

【讨论】:

  • 对不起,我花了这么长时间才回到这个问题;我陷入了其他工作的困境。这个update() 技巧正是我所需要的。它甚至还解决了我在使用hideturtle() 时遇到的一些问题。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-27
  • 1970-01-01
  • 2015-11-16
  • 2015-02-14
  • 1970-01-01
  • 2014-09-07
  • 2018-02-22
相关资源
最近更新 更多