У меня есть скрипт Tcl, управляющий автоматическим тестером. До сих пор это была консольная программа, которая принимала пользовательский ввод из командной строки. Коллега написал графический интерфейс Tk, который можно запустить с помощью сценария. Я сам никогда не использовал Tk, поэтому не очень разбираюсь в синтаксисе.
В начале теста скрипт должен получить серийный номер устройства у оператора. Это функция, которую мой коллега написал для этого:
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
- это процедура, которая просто обновляет текстовую метку в графическом интерфейсе.
Мне не нравится тот факт, что существует глобальная переменная gUserInterfaceBarCode
, которая используется для хранения серийного номера. Есть ли способ использовать вместо нее локальную переменную и вернуть процедуре это значение?
Если я правильно понимаю, если строка tkwait variable gUserInterfaceBarCode
вынута, эта функция не будет блокироваться, пока эта переменная не изменится. Это лучший способ для захвата пользовательского ввода из элемента GUI?