Rozdział 18 · Projekt: Aplikacja do rysowania

Pobieramy pozycję myszy

Wydarzenia Myszy pozwalają zamienić ruch kursora w prawdziwą linię na płótnie.

Pobieramy pozycję myszy

Podobnie jak w rozdziale 17, pomaga reagować na mysz .bind() — tylko zamiast zdarzeń klawiatury tutaj zdarzenia myszy: <Button-1> (naciska lewy przycisk), <B1-Motion> (ruch z użyciem zacisku lewym przyciskiem), <ButtonRelease-1> (przycisk został zwolniony).

poziciya_myshi.py
def pokazat_poziciyu(event):
    pozicia_label.config(text=f"x={event.x}, y={event.y}")

canvas.bind("<Motion>", pokazat_poziciyu)

event.x oraz event.y — współrzędne kursorem względem płótna, w tych samych jednostkach co Canvas.

Rysujemy linie

Trzy zdarzenia razem tworzą efekt „rysowania od punktu do punktu” <Button-1>, narysuj linię do aktualnej pozycji na każdym z nich <B1-Motion>:

risuem_linii.py
start_x, start_y = None, None

def nachalo_risovaniya(event):
    global start_x, start_y
    start_x, start_y = event.x, event.y

def vo_vremya_risovaniya(event):
    canvas.create_line(start_x, start_y, event.x, event.y, fill=tekuschij_cvet, width=tolschina)

canvas.bind("<Button-1>", nachalo_risovaniya)
canvas.bind("<B1-Motion>", vo_vremya_risovaniya)
<Button-1>: klikniętoprzycisk myszyzapamiętać start_x,start_y<B1-Motion>: ruszaj z nimiprzytrzymując przyciskrysujemy/aktualizujemy liniędo obecnego punktu<ButtonRelease-1>:puścili — figura…
Trzy wydarzenia razem tworzą gest „rysuj jednym ruchem”
Real Window: Kursor jest naciskany na początku linii, znak na płótnie jeszcze się nie pojawił
Real Window: Moment kliknięcia jest start_x/start_y pamiętany.
Rzeczywiste okno: gotowa linia prosta między punktem naciśnięcia a punktem puszczenia
Rzeczywiste okno: przycisk zwolniony — linia narysowana.
create_line — jak forward() w Turtle, tylko według współrzędnych
canvas.create_line(x1, y1, x2, y2) wyznacza granicę między dwoma punktami — koncepcyjnie tymi samymi jak goto() Turtle z rozdziału 6, tylko bez „żółwia”
Praktyka: pozycja myszy i rysowanie linii
Moduł tkinter otwiera natywne okno Python — wykonaj lokalnie w VS Code, PyCharm lub Jupyter
Praktyka kursuje lokalnie
Otwórz praktykę →