ПРИМЕР НАПИСАНИЯ ПРОГРАММЫ, РЕАЛИЗУЮЩУЮ ЭКРАННУЮ ФОРМУ ВВОДА ЛИЧНОЙ
КАРТОЧКИ
В качестве примера рассмотрим программу, реализующую экранную форму ввода
личной карточки.
Текст программы:
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"
}
wm title . "Form"
label .msg -font fixed -justify left -text
"Test window."
pack .msg -side top
frame .buttons
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
foreach i {var1 var2
var3 var4 var5} {
frame .$i -bd 2
entry .$i.entry -relief sunken -width 40 -textvariable
$i
label .$i.label
pack .$i.entry -side right
pack .$i.label -side
left
}.var1.label config -text Name:
.var2.label config
-text Address:
.var5.label config -text Phone:
pack .msg .var1 .var2
.var3 .var4 .var5 -side top -fill x
focus .var1.entry
В этом примере формы ввода личной карточки значения введенных полей
записываются в переменные 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“
для придания рельефа области ввода, а также задается размер в символах.
foreach i { var1 var2 var3 var4 var5} {
frame .$i -bd 2
entry .$i.entry -relief sunken -width 40
entry
.$i.entry -relief sunken -width 40 -textvariable $i
Опция -textvariable указывает, что значение поля ввода берется и будет
записано в переменной с именем “$i“.
label .$i.label
pack .$i.entry -side right
pack .$i.label -side
left
}
Здесь .$i.label : “.$i.“ - родительский объект, label - имя объекта. Имя
родительского объекта в цикле будет находиться из подстановки значения $i, и
будет принимать значения:
. var1.---, . var2.---, . var3.---, . var4.--- и . var5.---.
Подписи располагаются слева, а поля ввода справа.
Подписи для полей ввода определяются с помощью команды конфигурирования
“config“.
.var1.label config -text Name:
.var2.label config -text Address:
.var5.label config -text Phone:
Расположим созданные поля ввода в главном окне в следующем порядке.
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.
Все права защищены 1992-1999 DataX/FLORIN, Inc.