pack
Геометрический менеджер, который упаковывает виджеты по
сторонам внутреннего пространства окна.
СИНТАКСИС
pack option arg ?arg ...?
ОПИСАНИЕ
Команда pack используется для управления
соответствующим геометрическим менеджером, размещающим виджеты
по различным сторонам родительского окна, и для получения от
него справочной информации. Команда может иметь перечисленные
ниже формы в зависимости от значения аргумента
option.
- pack slave ?slave ...?
?options?
- Если первый аргумент команды является именем окна (любая
величина, начинающаяся с "."), команда выполняется
точно также, как команда pack configure.
- pack configure slave
?slave ...? ?options?
Аргумент команды состоит из имени одного или нескольких
размещаемых виджетов, после которых идут пары аргументов,
состоящих из имени опции и ее значения. Подробное описание
действий, выполняемых при размещении виджетов приведено ниже
(см. "Алгоритм
упаковки pack"). Ниже перечислены
возможные опции команды.
- -after other
- Other должно быть именем другого
окна. Мастер-окна other используется как мастер
для slave. Список slave slave ... вставляется в
список размещаемых окон сразу после other.
- -anchor anchor
- Anchor должен быть одной из возможных позиций
якоря, например, n или
sw. Он определяет как размещается slave в
отведенном ему пространстве. Значение по умолчанию
c.
- -before other
- Other должно быть именем другого
окна. Мастер-окно окна other используется как
мастер-окно для slave. Список slave slave
... вставляется в список размещаемых окон
непосредственно перед other.
- -expand boolean
- Определяет, будут ли перечисленные виджеты расширяться
при наличии свободного пространства в
мастер-окне. Boolean должно иметь булево
значение, например, 1 или
no. Значение по умолчанию
"0".
- -fill style
Если в мастер-окне для slave имеется свободное
пространство, управляет растяжением виджета slave.
Аргумент style может иметь одно из следующих
значений:
- none
- Предоставляет виджету slave требуемый
размер (включая поля, запрошенные с помощью опций
-ipadx или
-ipady). Это значение по
умолчанию.
- x
- Расширяет виджет slave в горизонтальном
направлении так, чтобы он заполнил все свободное
пространство (за исключением внешних полей, заданных с
помощью опции -padx).
- y
- Расширяет виджет slave в вертикальном
направлении так, чтобы он заполнил все свободное
пространство (за исключением внешних полей, заданных с
помощью опции -pady.)
- both
- Расширяет виджет slave в обоих
направлениях.
- -in other
- Включает slave(s) в конец списка размещаемых окон для
окна other.
- -ipadx amount
- Аргумент amount указывает размер горизонтальных
внутренних полей, которые должны быть с обеих сторон
виджета slave. Размер должен быть указан в одной из форм,
в которой можно задавать размеры на экране, например,
2 (2 пикселя) или .5c
(0.5 сантиметра). Значение по умолчанию 0.
- -ipady amount
- Аргумент amount указывает размер вертикальных
внутренних полей, которые должны быть с обеих сторон
виджета slave. Размер должен быть указан в одной из форм,
в которой можно задавать размеры на экране, например,
2 (2 пикселя) или .5c
(0.5 сантиметра). Значение по умолчанию 0.
- -padx amount
- Аргумент amount указывает размер горизонтальных
внешних полей, которые должны быть с обеих сторон виджета
slave. Размер должен быть указан в одной из форм, в
которой можно задавать размеры на экране, например,
2 (2 пикселя) или .5c
(0.5 сантиметра). Значение по умолчанию 0.
- -pady amount
- Аргумент amount указывает размер вертикальных
внешних полей, которые должны быть с обеих сторон виджета
slave. Размер должен быть указан в одной из форм, в
которой можно задавать размеры на экране, например,
2 (2 пикселя) или .5c
(0.5 сантиметра). Значение по умолчанию 0.
- -side side
- Определяет, к какой стороне мастер-окна будут помещены
виджеты slave. Возможные значения аргумента side:
left, right,
top или bottom. Значение
по умолчанию top.
Если никакая из опций -in,
-after или -before не
указана, каждый из slave будет внесен в конец
списка размещения своего непосредственного родителя (если
только он не был внесен туда ранее, в этом случае он
останется на своем прежнем месте). Если же одна из
перечисленных опций указана, все slave будут
внесены в соответствующий список в указанное место.
Если какие-либо из slave окон ранее уже
обрабатывались геометрическим менеджером, то для не
определенных в команде опций будут использоваться старые
значения, а не значения по умолчанию.
- pack forget slave ?slave ...?
- Перечисленные окна удаляются из списка упаковки и с
экрана. Эти окна больше не управляются геометрическим
менеджером.
- pack info slave
- Возвращает список опций и их значений для окна
slave в той же форме, в какой они задаются в команде
pack configure. Первые два элемента списка
"-in master", где
"master" - имя окна, в котором размещается
slave.
- pack propagate master
?boolean?
- Аргумент boolean, если он задан, определяет, будет
ли окно master расширяться при необходимости
(подробности приведены ниже, см. "Расширение виджетов"). Команда
при этом возвращает пустую строку. Если аргумент не задан,
команда возвращает текущее значение опции (0
или 1). По умолчанию расширение
разрешено.
- pack slaves master
- Возвращает список всех размещаемых окон для
master. Если в окне master нет размещаемых
окон, возвращается пустой список.
АЛГОРИТМ УПАКОВКИ pack
Для каждого мастер-окна менеджер pack формирует список
упаковки. Место каждого виджета в нем может задаваться с помощью
опций -in, -after и
-before. Если эти опции не использовались,
каждый новый виджет добавляется в конец списка своего
непосредственного предка.
Менеджер размещает виджеты в окне, последовательно просматривая
список упаковки. В момент обработки каждого из размещаемых
виджетов внутри мастера есть прямоугольная незаполненная
область. Эта область называется "полость". Для первого
обрабатываемого виджета "полость" совпадает со всей
внутренностью мастер-окна.
Для каждого из размещаемых виджетов выполняются следующие
действия:
- менеджер размещает прямоугольную область для очередного
виджета у стороны полости, заданной опцией
-side. Если значение опции
top или bottom, то ширина
области равна ширине полости, а высота равна требуемой для
виджета высоте плюс внешние и внутренние поля, заданные
опциями -ipady и -pady. Если
значение опции равно left или
right, высота области равна высоте полости, а
ширина определяется размером виджета плюс полями, заданными
опциями -ipadx и
-padx. Область может быть расширена в одном
или обоих направлениях в зависимости от значения опции
-expand (см. ниже "Расширение
виджетов").
- менеджер определяет размеры виджета. Обычно они равны
размерам, необходимым для виджета, плюс удвоенные внутренние
поля, но могут быть расширены до размеров области (минус
удвоенные внешние поля) по одному или обоим направлениям в
зависимости от значения опции -fill.
- менеджер размещает виджет в отведенном ему
пространстве. Если виджет меньше свободного пространства,
используется значение опции -anchor. Если
определены внешние поля, то они всегда сохраняются между
виджетом и границами области, в которой он помещается.
После того, как очередной виджет размещен, выделенная ему
область (см. 1)) вычитается из полости. Полость
для следующего виджета остается прямоугольной, но меньшей по
размеру. Если виджет не занял полностью выделенную ему область,
ее оставшиеся свободными части не используются при размещении
последующих виджетов. Если полость оказывается мала для
очередного виджета, он получает столько пространства, сколько
осталось. Если полость сокращается до нуля, все оставшиеся
виджеты в списке упаковки удаляются с экрана. Если размеры окна
будут увеличены, они появятся на экране.
РАСШИРЕНИЕ ВИДЖЕТОВ
Если мастер-окно оказалось больше, чем необходимо для
размещения всех виджетов, оставшееся пространство распределяется
равномерно между теми виджетами, для которых установлена опция
-expand. Дополнительное горизонтальное
пространство распределяется между теми виджетами, у которых
опция -side равна left или
right. Вертикальное пространство распределяется
между виджетами, у которых опция -side равна
top или bottom.
РАСПРОСТРАНЕНИЕ РАЗМЕРОВ
Обычно менеджер рассчитывает размеры мастер-окна, необходимые
для размещения виджетов, и, при необходимости, устанавливает
размеры мастер-окна таким образом, чтобы в нем в точности
поместились все виджеты из списка. Это приводит к тому, что
информация о размерах виджетов распространяется по
иерархическому дереву виджетов, в результате чего целое
поддерево изменяет свои размеры при изменении одного из
листьевых элементов. Однако команда pack
propagate может быть использована для отключения этого
механизма для одного или нескольких мастер-окон. Если
распространение размеров отключено, информация о необходимых
размерах не передается мастер-окну. Это может оказаться
полезным, если вы хотите, чтобы мастер-окно сохраняло те
размеры, которые вы определили.
ОГРАНИЧЕНИЯ НА МАСТЕР-ОКНА
Мастер-окно для каждого размещаемого виджета должно быть его
непосредственным предком (по умолчанию) или одним из потомков
его предка. Это ограничение гарантирует разумное поведение
виджетов при удалении toplevel-окон.
ПОРЯДОК РАЗМЕЩЕНИЯ
Если мастер-окно для виджета не является его непосредственным
предком, необходимо быть уверенным, что виджет лежит в стеке
окон выше, чем мастер-окно. В противном случае мастер-окно
закроет собой виджет и создастся впечатление, что виджет не
упакован правильным образом. Простейший способ избежать подобных
проблем следить, чтобы -окно было создано раньше, чем виджет
(чем позже создано окно, тем выше оно в стеке). Если это
почему-либо неудобно, можно использовать команды
raise и lower для изменения
порядка окон в стеке.