Rozdział 18 · Narzędzia do rysowania

Zapowiedź na żywo: coords()

Pojedynczy element jest tworzony raz i aktualizowany wielokrotnie, zamiast strumienia jednorazowych kształtów.

Nie odtwarzaj kształtu dla każdego ruchu

Naiwne podejście do podglądu — na każdej <B1-Motion> usuń starą szkicową figurę i stwórz nową. Działa, ale zmusza Canvas do bezustannego wyrzucania i ponownego tworzenia elementów — a przy okazji traci wszelkie indywidualne ustawienia, które ustawiłeś może tylko raz.

Utwórz on_press:podgląd RAZon_drag:coords(preview_id,…on_drag:coords(preview_id,…on_drag:coords(preview_id,…on_release:zablokować…
Utwórz raz → aktualizuj wiele razy → zatwierdź (CREATE ONCE → UPDATE MANY TIMES → COMMIT) — ten sam element, a nie strumień jednorazowych.
zhivoe_prevyu.py
def on_press(self, event):
    self.state.preview_id = self.canvas.create_rectangle(
        event.x, event.y, event.x, event.y,
        outline=self.state.color, width=self.state.width, dash=(4, 2),
    )

def on_drag(self, event):
    self.canvas.coords(
        self.state.preview_id,
        self.state.start_x, self.state.start_y, event.x, event.y,
    )
Rzeczywiste okno: przerywany prostokąt-podgląd w połowie przeciągania
Prawdziwe okno: Ten sam element, preview_id co coords() zmienia rozmiar – nie jest odtwarzany.
Rzeczywiste okno: przerywana owalna podglądówka w połowie przeciągania
Prawdziwe okno: ten sam pomysł działa w przypadku owalnego – zmienia się tylko kształt, który rysuje create_oval().
coords() akceptuje tyle liczb, ile potrzebuje figura
Dla linii i prostokąta cztery liczby (dwa punkty). Dla wielopunktowej polilinii (na przykład rosnący kontur ołówkiem), tyle par chcesz x, y. Najważniejsze to sprawa coords() z tym samym item_id, który zwrócił oryginalny create_*.
Praktyka: Zapowiedź na żywo przez coords()
Moduł tkinter otwiera natywne okno Python — wykonaj lokalnie w VS Code, PyCharm lub Jupyter
Praktyka kursuje lokalnie
Otwórz praktykę →