Spec-Zone.ru › Tcl/Tk

pack

ИМЯ
pack — Управляющий геометрией, упаковывающий вокруг краев полости
СИНОПСИС
ОПИСАНИЕ
pack slave ?slave ...? ?options?
pack configure slave ?slave ...? ?options?
-after other
-anchor anchor
-before other
-expand boolean
-fill style
none
x
y
both
-in other
-ipadx amount
-ipady amount
-padx amount
-pady amount
-side side
pack forget slave ?slave ...?
pack info slave
pack propagate master ?boolean?
pack slaves master
АЛГОРИТМ УПАКОВКИ
РАСШИРЕНИЕ
РАСПРОСТРАНЕНИЕ ГЕОМЕТРИИ
ОГРАНИЧЕНИЯ НА ОКНА-МАСТЕР
ПОРЯДОК УПАКОВКИ
ПРИМЕР
СМОТРИ ТАКЖЕ
КЛЮЧЕВЫЕ СЛОВА

Имя

pack — Управляющий геометрией, упаковывающий вокруг краёв полости

Синопсис

pack option arg ?arg ...?

Описание

Команда pack используется для взаимодействия с упаковщиком — управляющим геометрией, который упорядочивает дочерние элементы родителя, упаковывая их по порядку вокруг краёв родителя. Команда pack может иметь несколько форм, в зависимости от аргумента option:
pack slave ?slave ...? ?options?
Если первым аргументом pack является имя окна (любое значение, начинающееся с «.»), то команда обрабатывается так же, как pack configure.
pack configure slave ?slave ...? ?options?
Аргументы состоят из имён одного или нескольких окон-«рабочих лошадей» (slaves), за которыми следуют пары аргументов, которые определяют способ управления этими рабочими лошадьми. Подробности о том, как опции используются упаковщиком, см. в разделе АЛГОРИТМ УПАКОВКИ ниже. Поддерживаются следующие опции:
-after other
Other должно быть именем другого окна. Использует его родительское окно (master) как родительское для «рабочих лошадей» (slaves) и вставляет «рабочих лошадей» (slaves) сразу после other в порядке упаковки.
-anchor anchor
Anchor должен быть допустимой позицией якоря, например n или sw; он определяет, где позиционировать каждую «рабочую лошадь» (slave) в её участке. По умолчанию center.
-before other
Other должно быть именем другого окна. Использует его родительское окно (master) как родительское для «рабочих лошадей» (slaves) и вставляет «рабочих лошадей» (slaves) непосредственно перед other в порядке упаковки.
-expand boolean
Указывает, должны ли «рабочие лошади» (slaves) расширяться, чтобы занимать дополнительное пространство в своём родительском окне (master). Boolean может иметь любое корректное логическое значение, например 1 или no. По умолчанию 0.
-fill style
Если участок «рабочей лошади» (slave) больше, чем её запрошенные размеры, эта опция может использоваться для растяжения «рабочей лошади» (slave). Style должен иметь одно из следующих значений:
none
Присвоить «рабочей лошади» (slave) её запрошенные размеры плюс любой внутренний отступ, запрошенный с помощью -ipadx или -ipady. Это значение по умолчанию.
x
Горизонтально растянуть «рабочую лошадь» (slave) до заполнения всей ширины её участка (за исключением внешних отступов, указанных в -padx).
y
Вертикально растянуть «рабочую лошадь» (slave) до заполнения всей высоты её участка (за исключением внешних отступов, указанных в -pady).
both
Растянуть «рабочую лошадь» (slave) и по горизонтали, и по вертикали.
-in other
Вставить «рабочую лошадь» (slave) в конец списка упаковки для родительского окна, заданного other.
-ipadx amount
Amount определяет, сколько горизонтального внутреннего отступа оставлять по обеим сторонам «рабочей лошади» (slave). Amount должен быть допустимым расстоянием на экране, например 2 или .5c. По умолчанию 0.
-ipady amount
Amount определяет, сколько вертикального внутреннего отступа оставлять по обеим сторонам «рабочей лошади» (slave). По умолчанию 0.
-padx amount
Amount определяет, сколько горизонтального внешнего отступа оставлять по обеим сторонам «рабочей лошади» (slave). Amount может быть списком из двух значений для указания отступов слева и справа раздельно. По умолчанию 0.
-pady amount
Amount определяет, сколько вертикального внешнего отступа оставлять по обеим сторонам «рабочей лошади» (slave). Amount может быть списком из двух значений для указания отступов сверху и снизу раздельно. По умолчанию 0.
-side side
Указывает, к какой стороне родителя (master) будет упакована «рабочая лошадь» (slave). Должно быть left, right, top или bottom. По умолчанию top.

Если не указана опция -in, -after или -before, то каждая из «рабочих лошадей» (slaves) будет вставлена в конец списка упаковки для своего родителя, если она уже не управляется упаковщиком (в этом случае она останется на своём месте). Если одна из этих опций указана, то все «рабочие лошади» (slaves) будут вставлены в указанную точку. Если какие-либо из «рабочих лошадей» (slaves) уже управляются менеджером геометрии, то любые неуказанные опции для них сохраняют свои предыдущие значения, а не получают значения по умолчанию.

pack forget slave ?slave ...?
Удаляет каждую из «рабочих лошадей» (slave) из списка упаковки для её родительского окна и отключает их окна. «Рабочие лошади» (slaves) больше не будут управляться упаковщиком.
pack info slave
Возвращает список, элементы которого представляют текущее состояние конфигурации «рабочей лошади» (slave), заданной slave, в том же формате опция-значение, что и может быть указано в pack configure. Первые два элемента списка — «-in master», где master — родитель «рабочей лошади» (slave).
pack propagate master ?boolean?
Если boolean имеет истинное логическое значение, такое как 1 или on, то распространение включено для master, которое должно быть именем окна (см. РАСПРОСТРАНЕНИЕ ГЕОМЕТРИИ ниже). Если boolean имеет ложное логическое значение, то распространение отключено для master. В обоих этих случаях возвращается пустая строка. Если boolean опущено, то команда возвращает 0 или 1, чтобы указать, включено ли распространение для master в данный момент. Распространение включено по умолчанию.
pack slaves master
Возвращает список всех «рабочих лошадей» (slaves) в порядке упаковки для master. Порядок «рабочих лошадей» (slaves) в списке соответствует их порядку в списке упаковки. Если у master нет «рабочих лошадей» (slaves), то возвращается пустая строка.

Алгоритм упаковщика

Для каждого родителя (master) упаковщик поддерживает упорядоченный список «рабочих лошадей» (slaves), называемый списком упаковки. Опции конфигурации -in, -after и -before используются для указания родителя (master) для каждой «рабочей лошади» (slave) и её позиции в списке упаковки. Если ни одна из этих опций не задана для «рабочей лошади» (slave), то она добавляется в конец списка упаковки для своего родителя.

Упаковщик упорядочивает «рабочих лошадей» (slaves) для родителя (master) путём сканирования списка упаковки в порядке. В момент обработки каждой «рабочей лошади» (slave) всё ещё не распределён прямоугольный участок внутри родителя (master). Эта область называется полостью; для первой «рабочей лошади» (slave) это вся область родителя (master).

Для каждой «рабочей лошади» (slave) упаковщик выполняет следующие шаги:

  1. Упаковщик выделяет прямоугольный участок для «рабочей лошади» (slave) вдоль стороны полости, заданной опцией -side «рабочей лошади» (slave). Если сторона top или bottom, то ширина участка равна ширине полости, а его высота равна запрошенной высоте «рабочей лошади» (slave) плюс опции -ipady и -pady. Для сторон left или right высота участка равна высоте полости, а ширина равна запрошенной ширине «рабочей лошади» (slave) плюс опции -ipadx и -padx. Участок может быть расширен за счёт опции -expand (см. раздел РАСШИРЕНИЕ ниже).
  2. Упаковщик выбирает размеры «рабочей лошади» (slave). Ширина обычно равна запрошенной ширине «рабочей лошади» (slave) плюс дважды её опцию -ipadx, а высота обычно равна запрошенной высоте «рабочей лошади» (slave) плюс дважды её опцию -ipady. Однако, если опция -fill равна x или both, то ширина «рабочей лошади» (slave) расширяется до заполнения всей ширины участка минус дважды опцию -padx. Если опция -fill равна y или both, то высота «рабочей лошади» (slave) расширяется до заполнения всей высоты участка минус дважды опцию -pady.
  3. Упаковщик позиционирует «рабочую лошадь» (slave) над её участком. Если «рабочая лошадь» (slave) меньше участка, то опция -anchor определяет, где на участке будет размещена «рабочая лошадь» (slave). Если -padx или -pady отличны от нуля, то указанное количество внешнего отступа всегда будет оставлено между «рабочей лошадью» (slave) и краями участка.

После того, как заданный подчиненный (slave) был размещён, площадь его участка вычитается из полости, оставляя меньшую прямоугольную полость для следующего подчиненного. Если подчиненный не использует весь свой участок, неиспользованное пространство на участке не будет использовано последующими подчиненными. Если полость станет слишком маленькой, чтобы удовлетворить потребности подчиненного, то подчиненному будет предоставлено всё оставшееся пространство в полости. Если полость уменьшится до нулевого размера, то все оставшиеся подчиненные в списке размещения будут удалены с экрана, пока главное окно (master window) не станет достаточно большим, чтобы разместить их снова.

Расширение

Если главное окно настолько велико, что после размещения всех его подчиненных останется дополнительное пространство, то это дополнительное пространство равномерно распределяется между всеми подчиненными, для которых установлен параметр -expand. Дополнительное горизонтальное пространство распределяется среди расширяемых подчиненных, у которых параметр -side равен left или right, а дополнительное вертикальное пространство распределяется среди расширяемых подчиненных, у которых параметр -side равен top или bottom.

Распространение геометрии

Упаковщик обычно вычисляет, каким должно быть главное окно, чтобы в точности удовлетворить потребности его подчиненных, и устанавливает запрошенную ширину и высоту главного окна на эти значения. Это приводит к распространению информации о геометрии вверх по иерархии окон до верхнего уровня окна, чтобы все поддеревья размерами подстраивались под потребности листов окон. Однако, команда pack propagate может быть использована для отключения распространения для одного или нескольких главных окон. Если распространение отключено, то упаковщик не будет устанавливать запрошенную ширину и высоту упаковщика. Это может быть полезно, например, если вы хотите, чтобы главное окно имело фиксированный размер, который вы задаете.

Ограничения на главные окна

Главное окно для каждого подчиненного должно быть либо родителем подчиненного (по умолчанию), либо потомком родителя подчиненного. Это ограничение необходимо для гарантии, что подчиненный может быть размещен на любой видимой части своего главного окна без опасности обрезания подчиненного его родителем.

Порядок размещения

Если главное окно подчиненного не является его родителем, то вы должны убедиться, что подчиненный находится выше в порядке стекирования, чем главное окно. В противном случае главное окно закроет подчиненного, и покажется, что подчиненный не был правильно размещен. Самый простой способ убедиться, что подчиненный выше главного окна, заключается в создании главного окна первым: самое недавно созданное окно будет самым высоким в порядке стекирования. Либо вы можете использовать команды raise и lower для изменения порядка стекирования главного окна или подчиненного.

Пример

# Make the widgets
label .t -text "This widget is at the top"    -bg red
label .b -text "This widget is at the bottom" -bg green
label .l -text "Left\nHand\nSide"
label .r -text "Right\nHand\nSide"
text .mid
	.mid insert end "This layout is like Java's BorderLayout"
# Lay them out
pack .t   -side top    -fill x
pack .b   -side bottom -fill x
pack .l   -side left   -fill y
pack .r   -side right  -fill y
pack .mid -expand 1    -fill both

См. также

grid, place

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TkCmd/pack.htm

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TkCmd/pack.htm

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API