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

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

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

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.