В этом примере формы ввода личной карточки
значения введенных полей записываются в переменные var1 var2 var3 var4
var5.
Теперь рассмотрим текст по строкам
В начале программы объявляем глобальные
переменные и присваиваем им начальные значения:
global var1 var2 var3 var4 var5
set var1 ""
set var2 ""
set var3 ""
set var4 ""
set var5 ""
Затем описываем процедуру, которая будет
вызываться при нажатии кнопки ⌠Значения⌠ и выдавать на стандартное устройство
вывода значения наших переменных:
proc showValue {} {
В начале процедуры объявляем глобальные
переменные, которые будем использовать
global var1 var2 var3 var4 var5
Затем распечатываем их
puts "Переменная var1 = $var1"
puts "Переменная var2 = $var2"
puts "Переменная var3 = $var3"
puts "Переменная var4 = $var4"
puts "Переменная var5 = $var5"
}
Установим заголовок главного окна на строку
⌠Form⌠, используя команду управления менеджером окон WM
wm title . "Form"
Создадим подпись с именем .msg. Имя подписи
состоит из ⌠точки⌠ и имени, где ⌠точка⌠ - имя родительского объекта (главное
окно), имя - имя создаваемого объекта.
Кроме того, здесь же определяем шрифтом
подписи, выравнивание и собственно текст
label .msg -font fixed -justify left -text "Test window."
Используя команду pack, мы говорим интерпретатору,
что объект с именем (в данном случае это .msg) нужно расположить в верхней
части родительского (главного) окна (объекта)
pack .msg -side top
Командой frame создаем область
для расположения в ней кнопок управления с именем .buttons. Как видно
из имени, эта область принадлежит главному окну
frame .buttons
Расположение области .buttons задаем в
нижней части формы, причем эта область будет занимать по ширине все пространство
родительского окна. Опция ⌠-pady 2m⌠ устанавливает отступ объектов по вертикали,
которые будут располагаться во внутренней части .buttons, равной 2 мм.
pack .buttons -side bottom -fill x -pady 2m
Теперь создадим и расположим в созданной
области кнопки управления
button .buttons.dismiss -text "Вход"
-command "exit"
button .buttons.code -text "Значения"
-command "showValue"
pack .buttons.dismiss .buttons.code -side left -expand 1
Имена строятся по тому же принципу, ⌠.buttons.⌠
- родительское окно, ⌠dismiss⌠ - имя объекта.
При нажатии кнопки .buttons.dismiss
мы предписываем выполнить команду ⌠exit⌠, что приведет к завершения программы.
При нажатии кнопки .buttons.code мы предписываем выполнить процедуру с
именем ⌠showValue⌠, которая будет описана ниже.
Теперь создадим 5 полей ввода для переменных
var1, var2, var3, var4 и var5. Каждое поле ввода состоит из области (frame),
в которой находится поле ввода и подпись. При создании поля ввода ( команда
⌠entry⌠ ) используется опция ⌠relief⌠ для придания рельефа области ввода,
а также задается размер в символах.
Опция -textvariable указывает,
что значение поля ввода берется и будет записано в переменной с именем
⌠$i⌠.
label .$i.label
pack .$i.entry -side right
pack .$i.label -side left
}
Здесь .$i.label : ⌠.$i.⌠ - родительский
объект, label - имя объекта. Имя родительского объекта в цикле будет находиться
из подстановки значения $i, и будет принимать значения:
Расположим созданные поля ввода в главном
окне в следующем порядке.
pack .msg .var1 .var2 .var3 .var4 .var5 -side top
-fill x
Фокус ввода переместим в первое поле
ввода.
focus .var1.entry
Далее определим процедуру showValue,
которая в нашем случае распечатывает значения, которые были набраны оператором
в полях ввода.
proc showValue {} {
foreach i {f1 f2 f3 f4 f5} {
puts "Field $i : [.$i.entry get]"
}
}
Команда puts ⌠Field $i : [.$i.entry
get]⌠ печатает строку, в которой осуществлена подстановка $i на f1,
f2, f3, f4 и f5, а [.$i.entry get] на значения соответствующих полей ввода
.f1.entry, .f2.entry, .f3.entry, .f4.entry и .f5.entry.