본문으로 바로가기

bonkora 님이 제공해 주신 팁입니다.


ActiveTcl의 Wish8x를 실행시켜 wish8x 창과 콘솔 창을 띄운 후 만든 코드를 콘솔에서 실행시키고 난 뒤에 한번 더 코드를 실행시키면 "window name "xxx" already exists in parent"라는 에러메시지가 뜨면서 실행이 멈춥니다. 처음에 코드를 실행시킬 때 만든 위젯들이 있기 때문인데 같은 코드를 실행시킬 때는 앞서 만든 위젯들을 모두 없애야 합니다. 일일이 위젯들을 없애기는 불편하기 때문에 아래의 프러시저가 유용할 것입니다.

proc clw {{w .}} {
    foreach {mywidgets} [winfo children $w] {
        destroy $mywidgets
    }
}

메인 윈도우인 "."의 자식 위젯들을 없애려면 단순히

clw

 

라고 하면 되고 예를 들어 윈도우 ".top"의 자식 위젯들을 없애려면

clw .top

라고 하면 됩니다.