Трижды вы говорите, что хотите «очень быстро», но вы также говорите «так быстро, как был создан спиро». Мы можем легко сделать это быстрее, чем был создан spiro, но немного больше работы, чтобы сделать его «настолько быстрым».
Эта проблема указывает на низ живота механизма undo()
. Чтобы отменить только один из ваших кругов, включает в себя последовательность из более чем 80 шагов. Но даже это не дает полной ясности, почему это так медленно. Если мы отключаем обновления экрана, мы можем сделать это мгновенно. Но если это приемлемо, то вы также можете заменить undo()
на clear()
.
Я редко призываю людей возиться с tracer()
, и даже когда я это делаю, я обычно пишу примеры, которые делают простые tracer(False)
и tracer(True)
, чтобы избежать числового аргумента. Но это тот редкий случай, когда мы хотим, чтобы конкретный числовой аргумент tracer()
контролировал скорость графики undo()
:
from turtle import *
from random import choice
COLORS = ["orange", "blue", "green", "purple", "dark blue"]
hideturtle()
speed('fastest')
for _ in range(20):
pencolor(choice(COLORS))
circle(50)
left(20)
tracer(20) # value unrelated to either 20 above
while undobufferentries() > 1:
undo() # undo everything but hideturtle()
tracer(1)
exitonclick()
В моей системе отмена чертежа теперь имеет ту же скорость, что и do , но вам может потребоваться точная настройка аргумента на tracer()
для достижения эффекта ты хочешь.