2013-01-04 2 views
1

이것은 Tk에 관한 일반적인 질문이므로 code이 게시되지 않았 음을 용서해주십시오. 나는 엔트리, 두 개의 체크 버튼, 라디오 버튼, 버튼 위젯으로 구성된 작은 Tcl/Tk GUI를 작성했다. 어떤 위젯이 모든 위젯의 상태를 확인하고 뭔가를 할 때 특정 proc을 실행해야합니다. 체크 버튼이 선택되거나 항목 위젯에 입력되는 경우 등.Tcl/Tk 스크립트에 위젯의 변경을 바꿉니다.

나는 -validatecommandentry을 위해 등등, checkbuttonradiobutton에 대한 -command 같은 위젯 특정 옵션을 사용하여 원하는 동작을 얻을 수 있습니다. 이 구현에서 가지고있는 문제점은 이것이 투명하고 읽기 쉽지 않다는 것입니다.

bind 명령 또는 다른 것을 사용하여 위젯 변경시 스크립트를 호출 할 수 있습니까?

참고 : <KeyRelease><ButtonRelease>과 같은 것들을 bind 개까지 만들 수 있지만 위젯이 실제로 변경된 경우에만 스크립트를 실행하고 싶습니다.

당신에게

답변

3

사용 -variable 및 -textvariable 옵션 (항목에 대한 후자 checkbuttons 및 라디오 버튼의 이전을) 감사합니다. 모든 위젯을 지원하는 변수가 동일한 배열의 멤버가되게하십시오. 그런 다음 전체 배열에서 trace을 사용하여 변수 업데이트를 처리하십시오.

array set ::form {entry "" flag 0} 
entry .entry -textvariable ::form(entry) 
checkbutton .flag -variable ::form(flag) 
proc handle_update {name1 name2 op} { 
    # something changed 
    # <your code here> 
} 
trace add variable ::form write handle_update 
+0

감사합니다. '추적 '이 핵심이었고, 전에는 들여다 보지 않았습니다. – pn8830

관련 문제