본문 바로가기

[Tkinter] 61강 Canvas 전체 초기화 하기

@도마22026. 2. 20. 18:00
728x90


이 강의는 Tkinter GUI 강의 61강입니다

60강에서는
Canvas 아이템의 겹침과 레이어 순서를 제어하는 방법을 배웠습니다.

이번 강의에서는
Canvas에 그려진 모든 아이템을 한 번에 제거하고,
내부 상태까지 함께 정리하는 초기화(reset) 개념을 다룹니다.

이번 강의의 목표는 분명합니다.
Canvas를 언제든 깨끗한 상태로 되돌릴 수 있는 구조를 만드는 것입니다.


Canvas 초기화가 필요한 이유

실제 프로그램에서는
다음과 같은 상황이 자주 발생합니다.

  • 새 작업 시작
  • 파일 다시 열기
  • 실행 취소 / 리셋
  • 화면 재구성

이때
아이템 하나씩 지우는 방식은
비효율적입니다.


Canvas 전체 삭제 기본 코드

Canvas는
모든 아이템을 한 번에 삭제하는
명령을 제공합니다.

canvas.delete("all")

이 한 줄로
Canvas 내부의
모든 아이템이 제거됩니다.


가장 단순한 초기화 예제

import tkinter as tk

window = tk.Tk()
window.geometry("320x240")

canvas = tk.Canvas(window, width=300, height=200, bg="white")
canvas.pack(pady=20)

canvas.create_rectangle(50, 50, 150, 120, fill="skyblue")
canvas.create_text(150, 160, text="Canvas 내용")

canvas.delete("all")

window.mainloop()

실행 결과는
빈 Canvas입니다.


버튼으로 Canvas 초기화하기

import tkinter as tk

window = tk.Tk()
window.geometry("320x240")

canvas = tk.Canvas(window, width=300, height=200, bg="white")
canvas.pack()

canvas.create_rectangle(60, 60, 140, 140, fill="orange")

def reset_canvas():
    canvas.delete("all")

tk.Button(window, text="초기화", command=reset_canvas).pack(pady=10)

window.mainloop()

버튼을 누르면
Canvas가
완전히 비워집니다.


delete("all")의 정확한 의미

중요한 포인트입니다.

delete("all")은 Canvas 내부 아이템만 삭제한다

  • Canvas 위젯 자체 X
  • Canvas 크기 X
  • 배경색 X

즉,
그림만 지우는 것입니다.


초기화 시 반드시 함께 정리할 것들

Canvas만 비우면
문제가 생길 수 있습니다.

다음 항목들도
함께 정리해야 합니다.

  • 아이템 ID 변수
  • 아이템 리스트 / 딕셔너리
  • 현재 선택 상태
  • 내부 플래그 값

잘못된 초기화 예

canvas.delete("all")
canvas.move(box, 10, 0)

이 코드는
의미가 없습니다.

  • box ID는 이미 삭제됨
  • 내부 상태는 그대로

초기화는
상태 리셋까지 포함해야 합니다.


안전한 초기화 패턴

items = []

def reset():
    canvas.delete("all")
    items.clear()

Canvas와
프로그램 상태를
동시에 리셋합니다.


Canvas 초기화는 “상태 전환”이다

초기화는
단순한 삭제가 아니라
상태 변경 이벤트입니다.

그래서 보통
다음과 같이 사용합니다.

  • 새 파일 열기 전에 초기화
  • 작업 취소 시 초기화
  • 모드 변경 시 초기화

Canvas 초기화와 레이어 관계

delete("all") 이후에는
레이어 정보도
모두 사라집니다.

즉,
새로 그리는 아이템은
다시 처음부터 레이어를 쌓게 됩니다.


초보자가 자주 하는 실수

다음 실수는
아주 흔합니다.

  • Canvas만 지우고 내부 데이터 유지
  • delete("all") 후 이전 ID 사용
  • 초기화 후 화면 재구성 누락

초기화는
항상 전체 흐름으로 생각해야 합니다.


Canvas 제어 단계 정리

여기까지 오면
Canvas 제어 흐름은 완성됩니다.

  • 생성 (create)
  • 이동 (move)
  • 삭제 (delete)
  • 변경 (itemconfig)
  • 좌표 (coords)
  • 레이어 (tag_raise / tag_lower)
  • 초기화 (delete("all"))

이번 강의 핵심 정리

이번 강의에서 꼭 기억해야 할 내용입니다.

  • canvas.delete("all")로 전체 초기화
  • Canvas 위젯 자체는 유지된다
  • 내부 상태도 함께 리셋해야 한다
  • 초기화는 상태 전환이다

다음 강의 예고

다음 강의에서는
Canvas 상태를 체계적으로 관리하는 방법을 다룹니다.

이제
Canvas를
“그리는 도구”가 아니라
관리 대상 객체로 다룹니다.


728x90
도마2
@도마2 :: 도마의 코드노트

초보자를 위한 코딩 강의를 정리합니다. 파이썬부터 C#, Unity 게임 제작까지 차근차근 기록합니다. — 도마

목차