Rozdział 7 · Głębokie zanurzenie w Turtle

speed, tracer i update

Szybkość animacji i ostateczna geometria rysunku to zupełnie różne rzeczy. A dla naprawdę złożonych wzorów istnieje technika znacznie potężniejsza niż tylko speed(0).

speed() zmienia animację, a nie efekt

artist.speed() kontroluje, co jak szybko możesz zobaczyć rysunek, nie z tym, co ostatecznie masz. Ostateczny rysunek w speed(1) i na speed(0) wyjdzie geometrycznie dokładnie to samo — różnica jest tylko taka, czy widzisz sam proces, czy od razu gotowy wynik. Statyczny obraz fizycznie nie może pokazać różnicy w szybkości — widać ją tylko na żywo, przy uruchamianiu kodu.

tracer() i update(): pobierają partie

Nawet przy naprawdę złożonych rysunkach (setki i tysiące zespołów) speed(0) może wydawać się wolny — ekran odświeża się po każdy drużyny. screen.tracer(0) wyłączenia W ogóle aktualizacje pośrednie, oraz screen.update() aktualizuje ekran raz, ręcznie, gdy rysunek jest gotowy:

TRYB NORMALNY
→ ekran zaktualizowany
→ ekran zaktualizowany
→ ekran zaktualizowany
TRYB WSADOWY - tracer(0)
tracer(0)
drużyna, drużyna, drużyna, ...
update() → ekran odświeżył się RAZ
tracer_batch.py
import turtle

screen = turtle.Screen()
screen.setup(width=420, height=420)
screen.tracer(0)
artist = turtle.Turtle()
artist.hideturtle()
artist.pencolor("#5B24F9")

for i in range(36):
    artist.circle(80)
    artist.right(10)
screen.update()

screen.exitonclick()
Rezultat
Misterny, symetryczny wzór 36 nałożonych na siebie okręgów tworzących wzór kwiatowy
36 kółek, każde obracane o 10° – narysowane natychmiast dzięki tracer(0) + update()
tracer_batch_kod.py
screen.tracer(0)   # wyłącz aktualizacje pośrednie

for i in range(36):
    artist.circle(80)
    artist.right(10)

screen.update()    # ostatnia aktualizacja i cały wzór pojawia się naraz
Po co to potrzebne
Dla 10 poleceń różnica prawie niezauważalna. Ale dla tysięcy operacji tracer(0) + update() może sprawić, że rysowanie będzie wielokrotnie szybsze — ekran po prostu nie traci czasu na przerysowywanie po każdym kroku.

delay() - Samodzielne otoczenie

screen.delay() ustawia opóźnienie w milisekundach między Klatki animacji — koncepcyjnie podobne do speed(), ale Działa na poziomie ekranu, a nie pojedynczego żółwia:

delay_kod.py
screen.delay(15)   # milisekundy między klatkami animacji
print(screen.delay())  # bez argumentu zwróci aktualną wartość

Klasyczna pułapka debugująca

tracer(0) bez update() – pusty ekran
Jeśli wywołać tracer(0) coś narysować, ale zapomnieć update() — ekran pozostanie pusty! To jeden z najczęstszych i nieoczywistych błędów z Turtle — kod wykonuje się bez żadnego błędu, a na ekranie nic nie ma. Szczegółowo omówimy to w rozdziale o debugowaniu grafiki.
Praktyka: speed, tracer i update
Moduł turtle otwiera natywne okno Python – uruchamiane lokalnie w VS Code, PyCharm lub Jupyter
Otwórz praktykę →