Можно ли выполнить функцию без обновлений экрана? Python
def up():
t.speed(1)
t.goto(
t.xcor(),
t.ycor() + 10
)
У меня есть функция up, которая занимает некоторое время в выполнении. Как сделать так, чтобы программа (при возможности) сразу показала результат выполнения без изменения скорости? То есть без обновлений экрана. Есть ли способ сделать так для любой функции вне зависимости от её содержания? Я имею ввиду не только черепашку, но и ожидание и т.д. Мне нужно чтобы так получалось не изменяя код функции, чтобы в конкретной ситуации можно было проиграть код мгновенно. Извините за то, что поздно объяснил.
Ответы (1 шт):
Управляйте скоростью рисования из кода с помощью turtle.tracer и turtle.delay:
def up():
n = turtle.tracer() # сохранить интервал рисования
turtle.tracer(0) # убрать рисование совсем
delay = turtle.delay() # сохранить задержку рисования
turtle.delay(0) # убрать задержку рисования
# t.speed(1)
t.goto(t.xcor(),t.ycor()+10)
turtle.delay(delay) # восстановить задержку рисования
turtle.tracer(n) # восстановить интервал рисования
Можно сделать декоратор, который до вызова функции включает полную скорость, а после выключает:
import functools
import turtle
def instant(f):
@functools.wraps(f)
def wrapper(*args, **kwds):
n = turtle.tracer() # сохранить интервал рисования
turtle.tracer(0) # убрать рисование совсем
delay = turtle.delay() # сохранить задержку рисования
turtle.delay(0) # убрать задержку рисования
try:
return f(*args, **kwds)
finally:
turtle.delay(delay) # восстановить задержку рисования
turtle.tracer(n) # восстановить интервал рисования
return wrapper
t = turtle.Turtle()
@instant
def up():
# t.speed(1)
t.goto(t.xcor(),t.ycor()+10)
Маленькое демо: четверть спирали черепашка рисует в обычном темпе, четверть максимально быстро:
def curve(k, t):
for _ in range(90):
t.forward(k)
t.left(1)
k += 0.001
return k
def main():
t = turtle.Turtle()
k = 0.01
for _ in range(100):
k = curve(k, t)
k = instant(curve)(k, t)
main()
