자동화 된 테스터를 제어하는 Tcl 스크립트가 있습니다. 지금까지 명령 프롬프트에서 사용자 입력을받은 콘솔 프로그램이었습니다. 동료가 스크립트로 시작할 수있는 Tk GUI를 작성했습니다. 필자는 Tk를 직접 사용한 적이 없으므로 많은 구문을 이해하지 못합니다.Tcl/Tk bind에는 전역 변수가 필요합니까?
테스트 시작시 스크립트는 운영자로부터 장치 일련 번호를 가져와야합니다.
proc GetSerialNumber {} {
global gUserInterfaceBarCode
DisplayMessage "Enter serial number:"
.c.serialnumberbox configure -state normal
focus .c.serialnumberbox
bind .c.serialnumberbox <Return> { set gUserInterfaceBarCode [.c.serialnumberbox get] }
tkwait variable gUserInterfaceBarCode
#grid forget .c.serialnumberbox
.c.serialnumberbox configure -state disabled
}
DisplayMessage
단순히 GUI에 텍스트 레이블을 업데이트하는 절차입니다 : 이것은 내 동료가 그렇게 쓴 기능입니다.
일련 번호를 저장하는 데 사용되는 글로벌 변수 gUserInterfaceBarCode
이 있다는 사실을 싫어합니다. 대신 로컬 변수를 사용하여 프로 시저에서 해당 값을 반환하도록 할 수 있습니까?
올바르게 이해하면 tkwait variable gUserInterfaceBarCode
행을 빼면 해당 변수가 변경 될 때까지이 기능이 차단되지 않습니다. 이것이 GUI 요소에서 사용자 입력을 캡처하는 가장 좋은 방법입니까?
Tk 스크립트는 범위를 다루기가 더 쉬운 자체 도우미 절차에서 막연하게 복잡한 작업도 수행합니다. –
대부분의 Tcl OO 확장은 객체 인스턴스 변수가 네임 스페이스 변수처럼 보이게하므로 OO 확장을 사용하여 변수를 좀 더 캡슐화 할 수도 있습니다. 세 번째 방법은 각 값에 대해 하나의 변수 이름을 사용하는 대신 모든 상태에 대해 하나의 전역 배열 변수를 사용하는 것입니다. – schlenk