Skończyłem rysować! Pierwszy kompletny program
Ostatnie szlify pierwszego prototypu — czyszczenie płótna i swobodne rysowanie — i działający program w całości.
Skończyłem rysować!
Pozostaje dodać przycisk czyszczenia płótna oraz tryb „wolnego rysowania”
def ochistit_holst():
canvas.delete("all")
def vo_vremya_risovaniya(event):
if tekuschaya_figura == "svobodno":
canvas.create_oval(
event.x - tolschina, event.y - tolschina,
event.x + tolschina, event.y + tolschina,
fill=tekuschij_cvet, outline=tekuschij_cvet,
)
return
# ... pozostałe kształty jak w sekcji 18.5
<B1-Motion>. Rozdział 18.14 pokazuje, jak uzyskać prawdziwy ciągły rys – łącząc każdą nową kropkę z poprzednią.Pierwszy Kompletny Program
Pełna wersja pierwszego prototypu, w tym poprawione rysowanie „szkicowych” figur podczas przeciągania myszą, jest dostępna jako osobny plik:
projects/tkinter/paint-app/paint_app_basic.py
PaintApp (Rozdział 18.32).Zapisz id każdy narysowany kształt (canvas.create_* zwraca id) do lista — i dodaj przycisk, który usuwa ostatni po canvas.delete(id). Rozdział 18.24 rozbije ten pomysł jako prawdziwą architekturę.
Przestudiuj moduł tkinter.filedialog i spróbuj dodać przycisk „Zapisz” — przynajmniej zapisujący lista narysowane figury do pliku tekstowego (rozdział 15). Rozdział 18.30 pokaże pełne rozwiązanie przez JSON.
Streszczenie sekcji
Czego się nauczyliśmy
Canvas— widżet Tkinter do rysowania linii i figur według współrzędnych; współrzędne rosną w prawo i w dół od lewego górnego rogu.canvas.create_line/rectangle/oval(...)rysują gotowe figury według współrzędnych.- Wydarzenia Myszy (
<Button-1>,<B1-Motion>,<ButtonRelease-1>) śledzić kliknięcie, przeciąganie i puszczanie przycisku myszy. Scale— suwak do wyboru liczby w zakresie.- Paleta z kilkoma podobnymi przyciskami jest efektywniej tworzona w pętli niż ręcznie jeden po drugim.
- To dopiero pierwszy prototyp — wtedy rozdział znacznie dokładniej analizuje Canvas i architekturę aplikacji.