`destroy` — 창 하나 이상 파괴하기

destroy — 창 하나 이상 파괴하기

화면의 위젯을 더 이상 쓰지 않을 때, 그 위젯과 하위 계층을 통째로 지우고 싶을 땐 destroy를 쓰면 돼요. 꼭 필요할 때만 정리하고 싶다면, 위젯을 하나씩 지우는 대신 부모를 지우면 자식이 다 같이 사라져요.

출처: Tcl/Tk Manual — destroy

본문

시그니처

destroy ?window window ...?

이 명령은 window 인자로 주어진 창들과 그 모든 하위(descendant) 창을 삭제해요. 만약 "." 창이 삭제되면 모든 창이 파괴되고 애플리케이션은 (보통) 종료돼요.

창들은 주어진 순서대로 파괴돼요. 어떤 창을 파괴하는 중 오류가 발생하면 명령은 남은 창을 파괴하지 않고 중단돼요. window가 존재하지 않아도 오류를 돌려주지 않아요.

예제

주어진 위젯의 직계 자식인 체크버튼을 전부 파괴하기.

proc killCheckbuttonChildren {parent} {
   foreach w [winfo children $parent] {
      if {[winfo class $w] eq "Checkbutton"} {
         destroy $w
      }
   }
}

winfo children으로 부모의 직계 자식 목록을 얻은 뒤, winfo class로 위젯 클래스가 Checkbutton인 것만 걸러서 destroy하는 흐름이에요.

더 알아보기

wm(창 관리자 명령), winfo children, 위젯별 pathName destroy와 함께, 캔버스 아이템 삭제는 canvasdelete 하위 명령을 참고하세요.