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:

X →Y ↓(0, 0)startteraz
w dół-w prawo
X →Y ↓(0, 0)startteraz
w dół-w-lewo
X →Y ↓(0, 0)startteraz
w górę i prawo
X →Y ↓(0, 0)startteraz
w górę-w-lewo

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
Otwórz praktykę →