Rozdział 18 · Narzędzia do rysowania
Geometria prostokąta
Myszką można przeciągać w dowolnym z czterech kierunków – prostokąt powinien być taki sam.
Dwa kąty, cztery możliwe kierunki
canvas.create_rectangle(x1, y1, x2, y2) rysuje prostokąt
między dwoma punktami — ale użytkownik może przeciągnąć myszkę w dowolnym kierunku od punktu startowego:
w dół-prawo, w dół-lewo, w górę-prawo, w górę-lewo. Prostokąt jest taki sam —
Tk ustalić, która współrzędna jest większa:
Ale jeśli Twój kod potrzebuje też współrzędnych, na przykład do zapisu kształtu w dokumencie (Rozdział 18.13) z przewidywalnym porządkiem punktów, warto wyraźnie zredukować je do tej samej formy:
normalize_bounds.py
def normalize_bounds(x1, y1, x2, y2):
"""Przekształca dwa dowolne przeciwne punkty do (left, top, right, bottom)."""
return min(x1, x2), min(y1, y2), max(x1, x2), max(y1, y2)
Canvas robi to sam, a normalize_bounds() robi to dla twojego kodu
create_rectangle() idealnie rysuje prostokąt, nawet jeśli x1 > x2 – sam Tk nie gubi się w kierunku. normalize_bounds() nie musisz Canvas, lecz swój model dokumentu: ten sam kształt, narysowany w dowolnym kierunku, jest zapisany w JSON (sekcja 18.30) w tej samej przewidywalnej formie.Praktyka: normalize_bounds() dla wszystkich kierunków przeciągania i upuść
Automatyczna kontrola — przynieś współrzędne do (left, top, right, bottom) bez Tkinter