Rozdział 18 · Canvas serio

Canvas przechowuje obiekty, a nie piksele

create_line() nie tylko rysuje — dodaje element do lista, który Canvas pamięta siebie.

Canvas nie «maluje pikseli» — przechowuje obiekty

Pierwszy prototyp już rysuje, ale łatwo to sobie źle wyobrazić: jakby create_line() po prostu maluje piksele na zdjęciu jak pędzel w edytorze graficznym. W rzeczywistości Canvas działa inaczej — i prawie wszystko od tego zależy Reszta w tym rozdziale: cofanie akcji, edycja kształtów, kolejność stosowania.

canvas.create_rectangle(...)
Canvas
zapisuje kształt jako
item_id = 3
ekran
create_* nie tylko rysuje — dodaje ELEMENT do lista, który Canvas sam się przechowuje.

Zwrócona liczba — item ID, identyfikator danego elementu wewnątrz Canvas (Rozdział 18.10). Dopóki figura nie zostanie wyraźnie usunięta, Canvas ją zapamięta i może Przerysuj, przesuwaj lub zmieniaj — nawet jeśli twój kod dawno zakończył pracę z tym systemem.

canvas : Canvasitem #1 = line (0, 0,…100, 60)item #2 = rectangle…(10, 80, 120, 140)item #3 = oval (30,…20, 90, 70)
Canvas przechowuje LISTĘ elementów — mniej więcej tak, jakby miał swoje wewnętrzne „obiekty”
Rzeczywiste okno: płótno z trzema narysowanymi figurami — linią, prostokątem i owalu
To samo prawdziwe okno co Rozdział 18.7: trzy widoczne kształty – trzy przechowywane przedmioty.

Trzy różne warstwy – nie myl ich

WarstwaCo to jest
Model aplikacji (Python)Twoje zmienne i struktury danych to coś, co sam wymyśliłeś
Element Canvas (item)Zapis wewnątrz Canvas z typem, współrzędnymi i parametrami — tworzony przez create_*
Piksele na ekranieOstatni obraz, który widzi użytkownik, jest wynikiem narysowania elementu
item ID NIE jest identyfikatorem obiektu Python-
item_id = canvas.create_rectangle(...) zwraca regularną liczbę całkowitą, która jest wewnętrzną liczbą rekordu w obrębie Canvas, zamiast id() jakiś Python- obiekt, a nie indeks z listy, którą sam prowadzisz. Canvas daje liczby według własnych zasad (zwykle rosnących) — nie powinieneś polegać na konkretnych wartościach, a jedynie na fakcie, że każdy item_id unikalny dla jednego elementu.