Python 3.x 海龟图形运行非常慢?
我发现Python的海龟绘图功能非常慢。我本来预期会有一些延迟,但没想到要等几分钟才能画出一个相对简单的分形图(Koch曲线,迭代5次)。
即使我设置了turtle.speed(0)
,它仍然很慢。也许是有bug,因为它并没有像文档中所说的那样瞬间完成?
这个回答建议通过隐藏窗口来重新实现海龟绘图。还有一个类似的问题没有得到回答。我是不是漏掉了什么,还是说重新实现是解决办法?
这是我简化后的代码(生成l系统几乎是瞬间完成的):
import turtle
def l_system(V, w, P, n):
current = w
for i in range(n):
current = [P[x] if x in P else x for x in list(current)]
current = ''.join(current)
return current
def run_turtle(var, start, rules, iters, angle, size, scale):
terry = turtle.Turtle()
terry.pensize(1)
terry.pencolor("blue")
terry.speed(0)
dist = size / ((iters + 1) ** scale)
positions = []
angles = []
instructions = l_system(var, start, rules, iters)
for instr in instructions:
if instr in ('F', 'G'):
terry.forward(dist)
elif instr in ('M', 'N'):
terry.penup()
terry.forward(dist)
terry.pendown()
elif instr == '[':
positions.append(terry.pos())
angles.append(terry.heading())
elif instr == ']':
terry.goto(positions.pop())
terry.setheading(angles.pop())
elif instr == '+':
terry.left(angle)
elif instr == '-':
terry.right(angle)
turtle.mainloop()
def right_koch():
run_turtle(('F',), 'F', {'F':'F+F-F-F+F'}, 5, 90, 500, 3)
right_koch()
3 个回答
0
这样复制粘贴会更快:
from turtle import Turtle, speed, delay, tracer, update, done
def initialize():
speed(0)
delay(0)
tracer(0,0)
turt = Turtle()
turt.ht()
return turt
def finish():
update()
done()
所有内容都来自 @user2357112。
2
这里有个简单的复制粘贴,适合任何需要的人。感谢 @user2357112 的分享。
使用这些方法可以大大加快速度,直接达到最终结果:
.speed(0)
.delay(0)
.ht()
.tracer(0, 0)
# Code goes here
.update()
19
关闭绘图延迟:
turtle.delay(0)
并隐藏小海龟:
terry.ht()
关闭绘图延迟是最重要的。如果不这样做,每次小海龟移动时都会有10毫秒的停顿。
如果你想让它更快,而且只关心最后的图像,你可以完全关闭屏幕更新:
turtle.tracer(0, 0)
然后在小海龟执行完所有命令后只调用一次 update
:
terry.update()
在关闭追踪和手动调用 update
的情况下,我的程序几乎是瞬间完成的。