Сначала давайте обсудим ваш код для рисования. Ваше дерево состоит из около 500 линий, нарисованных 500 различными черепахами! Это кажется чрезмерным, поэтому давайте перепишем ваш код, чтобы использовать одну черепаху, которая отменяет свои движения, а не клонировать саму себя:
from turtle import Screen, Turtle
from random import uniform
def about(x):
return x * uniform(0.95, 1.05)
# recursively draw a tree
def tree(t, a, s):
if s < 2:
return
t.forward(s)
t.left(a)
tree(t, about(30), s * about(0.7))
t.right(2 * a)
tree(t, about(-30), s * about(0.7))
t.left(a)
t.backward(s)
screen = Screen()
screen.tracer(0)
turtle = Turtle()
turtle.hideturtle()
turtle.setheading(90)
tree(turtle, 15, 50)
screen.tracer(1)
screen.mainloop()
Что касается tracer()
, я не смог воспроизвести ваши результаты, но изображение никогда не завершено либо. Аргумент tracer()
указывает, что вы хотите обновлять изображение только при каждой операции nth
graphi c. Это очень специализированный метод, и я рекомендую только значения 0 и 1. Во-первых, сложно рассчитать, каким должно быть каждое n-е обновление, основываясь на алгоритме и что имеет смысл визуально для пользователя. Во-вторых, в стандартной Python черепахе есть некоторые операции, которые вызывают обновление независимо от настройки tracer()
, которая отбрасывает этот расчет, если только вы не знаете, когда происходят эти дополнительные обновления.
В вашем случае, для скорости целей, установите tracer(0)
, когда начинается интенсивное рисование, и установите tracer(1)
, когда вы закончите рисование. Тогда все должно работать нормально.