
이 강의는 Tkinter GUI 강의 62강입니다
61강에서는
Canvas를 완전히 초기화(delete("all")) 하고
다시 시작하는 구조를 만들었습니다.
이번 강의에서는
Canvas를 단순한 그림판이 아니라
“상태를 가지는 UI 영역”으로 다루는 방법을 배웁니다.
이번 강의의 목표는 분명합니다.
Canvas의 아이템과 프로그램 내부 데이터를
같은 상태로 동기화하는 감각을 익히는 것입니다.
Canvas 상태란 무엇인가
Canvas 자체는
상태를 기억하지 않습니다.
Canvas는 단지
“지금 그려진 것”만 알고 있을 뿐입니다.
그래서 개발자가
상태를 직접 관리해야 합니다.
예를 들면:
- 현재 선택된 아이템
- 생성된 아이템 목록
- 편집 중인지 여부
- 드래그 중인지 여부
이것들이
모두 Canvas 상태입니다.
왜 상태 관리가 필요한가
상태 관리가 없으면
다음 문제가 생깁니다.
- 어떤 아이템이 선택됐는지 모름
- 삭제 후 내부 데이터 불일치
- 드래그 중인데 다른 이벤트 실행
- 초기화 후 이전 상태 남음
Canvas를 쓰는 순간부터
상태 관리는
필수 요소가 됩니다.
가장 기본적인 상태 변수
Canvas 상태 관리는
보통 변수 몇 개로 시작합니다.
items = []
selected_item = None
is_dragging = False
이 세 가지만 있어도
Canvas 제어의 절반은
해결됩니다.
아이템 생성 시 상태에 등록하기
item = canvas.create_rectangle(40, 40, 120, 120, fill="skyblue")
items.append(item)
이제
Canvas와
내부 데이터가
같은 정보를 공유합니다.
선택 상태 관리 예제
def select_item(item_id):
global selected_item
if selected_item:
canvas.itemconfig(selected_item, outline="black")
selected_item = item_id
canvas.itemconfig(selected_item, outline="red")
- 선택 이전 상태 해제
- 새 선택 강조
이 구조는
거의 모든 에디터 UI의
기본 패턴입니다.
삭제 시 상태도 함께 정리하기
def delete_selected():
global selected_item
if not selected_item:
return
canvas.delete(selected_item)
items.remove(selected_item)
selected_item = None
Canvas와
상태를
항상 함께 관리합니다.
초기화와 상태 리셋 연결하기
def reset_all():
canvas.delete("all")
items.clear()
global selected_item
selected_item = None
61강의
초기화 개념이
상태 관리와
자연스럽게 연결됩니다.
상태는 UI 행동을 제한한다
상태 변수는
“지금 무엇을 할 수 있는지”를
결정합니다.
def on_click(event):
if is_dragging:
return
이런 패턴은
버그를 막는 데
매우 중요합니다.
상태 관리의 핵심 원칙
여기서 꼭 기억해야 할 원칙입니다.
Canvas에 보이는 것과 내부 상태는 항상 같아야 한다
이 원칙이 깨지면
UI는
즉시 불안정해집니다.
상태 관리는 구조 설계의 출발점이다
Canvas 상태 관리는
다음 단계로 이어집니다.
- 드래그 이벤트
- 다중 선택
- 레이어 관리
- Undo / Redo
그래서
이 강의는
Canvas 응용의
분기점입니다.
초보자가 자주 하는 실수
다음 실수는
아주 흔합니다.
- Canvas만 믿고 상태 변수 안 둠
- 삭제 후 리스트 미정리
- 선택 상태 중복 처리
Canvas는
상태를 대신 관리해주지 않는다는 점을
항상 기억해야 합니다.
이번 강의 핵심 정리
이번 강의에서 꼭 기억해야 할 내용입니다.
- Canvas는 상태를 기억하지 않는다
- 아이템 목록과 선택 상태를 직접 관리해야 한다
- Canvas와 내부 데이터는 항상 동기화해야 한다
- 상태 관리는 모든 Canvas 응용의 기반이다
다음 강의 예고
다음 강의에서는
Canvas 마우스 클릭 이벤트 처리를 다룹니다.
이제
Canvas가
사용자의 행동에
직접 반응하기 시작합니다.
'⚙️ Python > 🪟 Tkinter 기초' 카테고리의 다른 글
| [Tkinter] 64강 클릭 좌표 활용하기 (0) | 2026.02.21 |
|---|---|
| [Tkinter] 63강 Canvas 마우스 클릭 이벤트 처리 (0) | 2026.02.21 |
| [Tkinter] 61강 Canvas 전체 초기화 하기 (0) | 2026.02.20 |
| [Tkinter] 60강 Canvas 그리기 순서와 레이어 개념 이해하기 (0) | 2026.02.19 |
| [Tkinter] 59강 Canvas 아이템 좌표 직접 다루기(coords) (0) | 2026.02.19 |