ПРИМЕР НАПИСАНИЯ ПРОГРАММЫ, РЕАЛИЗУЮЩУЮ ЭКРАННУЮ ФОРМУ ВВОДА ЛИЧНОЙ КАРТОЧКИ

В качестве примера рассмотрим программу, реализующую экранную форму ввода личной карточки.

Текст программы:
 

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.