Do tej pory pokazywaliśmy podstawowe operacje w Turtle, które umożliwiały nam rysowanie różnych kształtów. Tym razem zobaczymy jak obsłużyć zdarzenia. Przykładowo naciśniecie klawisza lub kliknięcie myszki. Tym samym nasze aplikacji będą mogły wchodzi w interakcję z użytkownikiem.

Przypisanie zdarzenia do klawisza

Najprostszy kod, który obsługuje naciśnięcie przez użytkownika klawisza, wygląda tak:

import turtle

window = turtle.Screen()
t = turtle.Turtle()

def up():
    pass

window.onkey(up,'Up')

window.listen()
window.mainloop()

Najważniejsza jest funkcja window.onkey(). Jako drugi parametr przyjmuje zdarzenie które chcemy obsłużyć, czyli jaki klawisz nas interesuje. W tym przypadku jest to strzałka do góry.

Jako drugi parametr, przyjmuje funkcję która ma się wykonać. Czyli w momencie kiedy użytkownik naciśnie strzałkę do góry, wykona się funkcja up().

Na początku kodu, importujemy bibliotekę turtle, oraz tworzymy obiekt window = turtle.Screen()

Na końcu kodu, wykonujemy jeszcze 2 ważne funkcje:

  • window.listen() – informujemy turtle, że ma nasłuchiwać na zdarzenia
  • window.mainloop() – informujemy turtle, aby nie zamykał programu, po pojawieniu się klawisza, ale by dalej program działał

Obsługa wielu klawiszy w turtle

Jeżeli chcemy obsługiwać wiele klawiszy, robimy to analogicznie. Za pomocą funkcji onkey(), przypisujemy więcej funkcji do większej ilości klawiszy. Przykładowo:

def up():
    t.forward(100)

def left():
    t.left(45)

def right():
    t.right(45)

def bye():
    turtle.bye()

window.onkey(up,'Up')
window.onkey(left,'Left')
window.onkey(right,'Right')
window.onkey(bye,'q')

Powyższy kod:

  • przypisuje funkcje do naciśnie strzałek
  • przypisuje funkcje która zamyka program do klawisza ‚q’
  • Jeżeli użytkownik naciśnie strzałkę do góry, to żółw pójdzie do przydu. Przy strzałkach w bok, żółw skręci.

Obsługa kliknięcia myszy w turtle

Do tej pory używaliśmy funkcji window.onkey(), aby przypisać funkcję która ma się wykonać do konkretnego klawisza.

Aby obsłużyć kliknięcie myszy, mamy do dyspozycji funkcję window.onclick(), która przyjmuje jako parametr funkcję która ma się wykonać jeżeli użytkownik kliknie. Dodatkowo, funkcja ta, otrzymuje jako parametry, miejsce kliknięcia myszy, w postaci współrzędnych x, y.

Zobaczmy jak to wygląda w kodzie:

def click(x,y):
    t.goto(x,y)

window.onclick(click)
  1. Użyliśmy funkcji window.onclick(), i przypisaliśmy nowo utworzoną funkcję click
  2. Funkcja klik, przyjmuje parametry x, y
  3. W momencie kiedy użytkownik kliknie, miejsce kliknięcia jest przekazywane do funkcji
  4. I w naszym przykładzie, żółw przemieści się do wskazanego miejsca

Całość kodu

Aby dodatkowo, uatrakcyjnić program, przed każdorazowym przemieszczeniem się żółwia, żółw zmienia kolor na losowo wybrany.

import turtle
import random

window = turtle.Screen()
t = turtle.Turtle()
t.pensize(7)
t.shape('turtle')

def up():
    t.color(random.choice(['red','blue','yellow','green']))
    t.forward(100)

def left():
    t.left(30)

def right():
    t.right(30)

def bye():
    turtle.bye()

def click(x,y):
    t.color(random.choice(['red','blue','yellow','green']))
    t.goto(x,y)


window.onkey(up,'Up')
window.onkey(left,'Left')
window.onkey(right,'Right')
window.onkey(bye,'q')

window.onclick(click)

window.listen()
window.mainloop()

A my w rezultacie otrzymujemy prosty program, reagujący na naciśnięcie strzałek, klawisza ‚q’ oraz kliknięcie myszki:

Python Turtle