Уроки Tk

Начало Уроки Tk Файлы
Статьи Уроки Tcl Гостевая книга
Предыдущий урок - #06: Расположение виджетов - place

#07: Фреймы - frame, labelframe

Иногда требуется объеденить несколько виджетов в группу например для того, чтобы они имели одинаковую ширину или высоту. Для этих целей есть специальные виджеты - фреймы. В Tk есть два вида фреймов - frame и labelframe. Если первый фрейм не отображает ничего на экране, то второй выводит рамку и подпись.

После создания фрейма в него укладываются виджеты. Есть два способа указать команде pack, что надо уложить виджет во фрейм. Можно в имени виджета упомянуть имя фрейма, например: ".frame1.label1", тогда менеджер окон по имени виджета определит, что он принадлежит фрейму ".frame1", при этом фрейм может быть вложен в другой фрейм и так далее, бывает что имя виджета получается очень длинным. Второй способ - в команде pack в помощью опции -in указать фрейм, в который вам хочется поместить виджет. Этот путь имеет два преимущества - имя виджета становится короче и если вам захочется положить виджет в другой фрейм не придётся во всей программе менять его имя.

Фрейм используется так же, как и все виджеты. Как уже было сказано выше, в labelframe выводится рамка и подпись для всего фрейма, поэтому у него есть несколько дополнительных опции настройки шрифта, толщины рамки, рельефа и т.д. Стандартные опции для frame и labelframe:

Специфичные для frame и labelframe опции:

-background
    Эта опция аналогична стандартной, за тем исключением, что вместо цвета может быть задана пустая строка.
-class
    Указывает класс для окна. Этот класс будет использоваться при запросе опций для окна из базы данных и может быть позже использован для других целей, например, привязки клавиш. Опция class не может быть изменена командой configure.
-colormap
    Задаёт набор цветов, которые будут использоваться во фрейме. Если значение - new, то будет создан новый набор цветов, если значение - имя другого окна, то будет цвета будут взяты оттуда. Если опция не задана, то будут использоваться цвета родительского окна. Опция colormap не может быть изменена командой configure.
-container
    Значение - булевское да (1, yes, true) или нет (0, no, false). Если значение истина, то фрейм может использоваться как контейнер для других окон (например, может быть встроено другое окно с помощью опции -use), в этом случае фрейм не может содержать в себе виджетов. Опция container не может быть изменена командой configure.
-height
    Задаёт высоту фрейма. Если значение меньше или равно нулю, то фрейм не будет иметь вообще никакого размера по вертикали вообще.
-labelanchor (только labelframe)
    Задаёт расположение для метки. Метка выводится, если задано значение опции -text. Возможные значения (перечисление по часовой стрелке): nw, n ,ne, en, e, es, se, s, sw, ws, w, wn. По умолчанию - nw.
-labelwidget (только labelframe)
    Задаёт виджет, который будет помещен вместо метки.
-visual
    Задаёт визуальную информацию для нового окна. Опция visual не может быть изменена командой configure.
-width
    Задаёт ширину фрейма. Если значение меньше или равно нулю, то фрейм не будет иметь вообще никакого размера по горизонтали вообще.

Пример:


wm title . "Калькулятор"

frame .top
entry .top.ex -textvariable ex -relief groove
label .top.ans -text ? -relief groove
button .run -text Решить -relief groove \
	-command { .top.ans configure -text [expr $ex+0] }

pack .top -fill x
pack .run -expand yes -fill both
pack .top.ex -expand yes -side left -fill x
pack .top.ans

Горбачев "Yurez" Юрий  
Хостинг от uCoz