Strona główna » Poradniki » Logomocja » Python i Żółw » Cykliczne Rysowanie
 

Cykliczne Rysowanie

Cel

W celu utworzenia animacji, albo chcąc opóźnić wykonywanie kolejnych części skryptu użyteczne jest uruchomienie fragmentu kodu po pewnym czasie. Służy do tego funkcja ontimer dostępna w obiekcie ekranu. W tym artykule zostanie przedstawione jak wykonywać część skryptu z opóźnieniem.

Definicja

Obsługę opóźnionego wykonywania obsługuje ekran na którym wyświetlany jest żółw. Oznacza to, że wpierw należy go pobrać (lub wymusić utworzenie) i dopiero wtedy będzie można wykonać coś po pewnym czasie. Służy do tego wbudowana metoda ontimer, która przyjmuje dwa argumenty: funkcję do wywołania oraz czas w milisekundach po którym funkcja ma zostać wykonana.

Przykładowo, aby żółw zaczął chodzić w kółko wystarczy poniższy skrypt:

  1. import turtle
  2. żółw = turtle.Turtle()
  3. ekran = turtle.Screen()
  4. def kółko():
  5. żółw.fd(10)
  6. żółw.rt(10)
  7. ekran.ontimer(kółko, 40)
  8. kółko()
  9. ekran.mainloop()

W skrypcie została zdefiniowana metoda kółko(), która rysuje fragment kółka, następnie wywołuje samą siebie z 40 milisekundowym opóźnieniem. Jest to pętla nieskończona, ale która automatycznie się nie uruchomi, więc trzeba ją wywołać. Na końcu programu na ekranie wywoływana jest metoda mainloop(), która powoduje, że program nie zakończy działania od razu po dojściu na koniec skryptu.

Implementacja

W artykule dotyczącym pisania tekstu na ekranie jest zadanie polegające na narysowaniu zegara. Wykorzystując cykliczne wywołania fragmentu skryptu można go wzbogacić teraz o automatyczne rysowanie wskazówek. Przykładowo po narysowaniu tarczy zegara wystarczyłoby wywołać następny kod, który będzie rysował wskazówkę sekundową:

Zegar
  1. def sekunda():
  2.   żółw.pencolor("white")
  3.   żółw.bk(70)
  4.   żółw.rt(6)
  5.   żółw.pencolor("black")
  6.   żółw.fd(70)
  7.   ekran.ontimer(sekunda, 1000)
  8. żółw.fd(70)
  9. sekunda()
  10. ekran.mainloop()

Zdefiniowana metoda sekunda() zamalowywuje narysowaną wcześniej wskazówkę, obraca żółwia, a następnie rysuje nową. Kolejne wywołanie metody następuje dopiero po upływie sekundy tj. 1s = 1000 ms. Należy jednak pamiętać, aby przed wywołaniem metody narysować pierwszą wskazówkę. Dodatkowo warto zauważyć, że wskazówka zawsze startuje z pozycji na liczbę 12.

Zadania
Zadanie 1
Kod źródłowy Zadanie 1Kod źródłowy Zadanie 1Kod źródłowy Zadanie 1