2010-02-08 4 views

답변

5

위젯이 주어지면 [winfo children]을 사용하여 위젯의 모든 하위 항목을 가져올 수 있습니다. 작은 재귀 프로 시저를 사용하면 위젯 트리에서 모든 위젯을 처리 할 수 ​​있습니다. 게으르 길 원한다면 보통 [info commands. *]를 실행하여 모든 위젯 목록을 얻을 수 있습니다. 응용 프로그램이 "."로 시작하는 이름을 가진 프로 시저 또는 이미지를 작성하지 않는 한, 이는 종종 충분하지 않습니다.

대부분의 tk 위젯은 "-state"옵션을 허용하고, 상태는 중요하지 않으므로 무시할 수 있습니다 (예 : 프레임 위젯). 따라서 모든 위젯을 반복하고 [catch {$ widget configure -state disabled}]와 같은 작업을 수행 할 수 있습니다. 이것은 다른 수단 (예 : "state"부속 명령이있는 ttk 버튼)으로 활성화 또는 비활성화해야하는 특수한 위젯이있는 경우에는 작동하지 않습니다. 당신은 표준 위젯을 사용하여 간단한 응용 프로그램이있는 경우

,이 같은 충분 될 수 있습니다

위젯의 클래스를 얻기 위해 "[클래스 $ 위젯 winfo]"사용할 수있는 정밀한 제어를 위해
proc disable_all {path} { 
    catch {$path configure -state disabled} 
    foreach child [winfo children $path] { 
     disable_all $child 
    } 
} 

, 그리고 클래스에 따라 다른 명령을하십시오.

+0

tcl 재귀 proc에서 위젯의 이전 상태를 저장할 수 있습니까? 다음 번에는 비활성화 된 기능 만 활성화 할 수 있습니다. – OliveOne

+0

나는 시저의 walkIntoTKTree {w} { \t 세트 깊이 0 \t 동안 {$ 깊이 <사용할 생각 [어린이 winfo llength을 [$] w]} { \t \t \t walkIntoTKTree [LINDEX [어린이 winfo $의 w] $ 깊이] \t \t \t incr depth; \t} \t "w = $ w" } 을 넣지 만 더 좋음 – OliveOne

관련 문제