334 lines
14 KiB
HTML
334 lines
14 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||
<html>
|
||
<head>
|
||
<title>pack</title>
|
||
</head>
|
||
<body>
|
||
|
||
<h1>pack</h1>
|
||
|
||
<p>Геометрический менеджер, который упаковывает виджеты по
|
||
сторонам внутреннего пространства окна.</p>
|
||
|
||
<h2><a name="СИНТАКСИС"></a>СИНТАКСИС</h2>
|
||
|
||
<pre>
|
||
<strong>pack</strong> <em>option arg</em> ?<em>arg ...</em>?
|
||
</pre>
|
||
|
||
<h2><a name="ОПИСАНИЕ"></a>ОПИСАНИЕ</h2>
|
||
|
||
<p>Команда <strong>pack</strong> используется для управления
|
||
соответствующим геометрическим менеджером, размещающим виджеты
|
||
по различным сторонам родительского окна, и для получения от
|
||
него справочной информации. Команда может иметь перечисленные
|
||
ниже формы в зависимости от значения аргумента
|
||
<em>option</em>.</p>
|
||
|
||
<dl>
|
||
<dt><strong>pack</strong> <em>slave</em> ?<em>slave</em> ...?
|
||
?<em>options</em>?</dt>
|
||
|
||
<dd>Если первый аргумент команды является именем окна (любая
|
||
величина, начинающаяся с "."), команда выполняется
|
||
точно также, как команда <strong>pack configure.</strong></dd>
|
||
|
||
<dt><strong>pack configure</strong> <em>slave</em>
|
||
?<em>slave</em> ...? ?<em>options</em>?</dt>
|
||
|
||
<dd><p>Аргумент команды состоит из имени одного или нескольких
|
||
размещаемых виджетов, после которых идут пары аргументов,
|
||
состоящих из имени опции и ее значения. Подробное описание
|
||
действий, выполняемых при размещении виджетов приведено ниже
|
||
(см. "<a href="#АЛГОРИТМ_РАЗМЕЩЕНИЯ_pack">Алгоритм
|
||
упаковки <em>pack</em></a>"). Ниже перечислены
|
||
возможные опции команды.</p>
|
||
|
||
<dl>
|
||
<dt><strong>-after</strong> <em>other</em></dt>
|
||
|
||
<dd><em>Other</em> должно быть именем другого
|
||
окна. Мастер-окна <em>other</em> используется как мастер
|
||
для slave. Список <em>slave slave ...</em> вставляется в
|
||
список размещаемых окон сразу после <em>other</em>.</dd>
|
||
|
||
<dt><strong>-anchor</strong> <em>anchor</em></dt>
|
||
|
||
<dd><em>Anchor</em> должен быть одной из возможных позиций
|
||
якоря, например, <strong>n</strong> или
|
||
<strong>sw</strong>. Он определяет как размещается slave в
|
||
отведенном ему пространстве. Значение по умолчанию
|
||
<strong>c</strong>.</dd>
|
||
|
||
<dt><strong>-before</strong> <em>other</em></dt>
|
||
|
||
<dd><em>Other</em> должно быть именем другого
|
||
окна. Мастер-окно окна <em>other</em> используется как
|
||
мастер-окно для <em>slave</em>. Список <em>slave slave
|
||
...</em> вставляется в список размещаемых окон
|
||
непосредственно перед <em>other</em>.</dd>
|
||
|
||
<dt><strong>-expand</strong> <em>boolean</em></dt>
|
||
|
||
<dd>Определяет, будут ли перечисленные виджеты расширяться
|
||
при наличии свободного пространства в
|
||
мастер-окне. <em>Boolean</em> должно иметь булево
|
||
значение, например, <strong>1</strong> или
|
||
<strong>no</strong>. Значение по умолчанию
|
||
"0".</dd>
|
||
|
||
<dt><strong>-fill</strong> <em>style</em></dt>
|
||
|
||
<dd><p>Если в мастер-окне для <em>slave</em> имеется свободное
|
||
пространство, управляет растяжением виджета slave.</p>
|
||
|
||
<p>Аргумент <em>style</em> может иметь одно из следующих
|
||
значений:</p>
|
||
|
||
<dl>
|
||
<dt><strong>none</strong></dt>
|
||
|
||
<dd>Предоставляет виджету <em>slave</em> требуемый
|
||
размер (включая поля, запрошенные с помощью опций
|
||
<strong>-ipadx</strong> или
|
||
<strong>-ipady</strong>). Это значение по
|
||
умолчанию.</dd>
|
||
|
||
<dt><strong>x</strong></dt>
|
||
|
||
<dd>Расширяет виджет <em>slave</em> в горизонтальном
|
||
направлении так, чтобы он заполнил все свободное
|
||
пространство (за исключением внешних полей, заданных с
|
||
помощью опции <strong>-padx</strong>).</dd>
|
||
|
||
<dt><strong>y</strong></dt>
|
||
|
||
<dd>Расширяет виджет <em>slave</em> в вертикальном
|
||
направлении так, чтобы он заполнил все свободное
|
||
пространство (за исключением внешних полей, заданных с
|
||
помощью опции <strong>-pady</strong>.)</dd>
|
||
|
||
<dt><strong>both</strong></dt>
|
||
|
||
<dd>Расширяет виджет <em>slave</em> в обоих
|
||
направлениях.</dd>
|
||
</dl>
|
||
</dd>
|
||
|
||
<dt><strong>-in</strong> <em>other</em></dt>
|
||
|
||
<dd>Включает slave(s) в конец списка размещаемых окон для
|
||
окна <em>other</em>.</dd>
|
||
|
||
<dt><strong>-ipadx</strong> <em>amount</em></dt>
|
||
|
||
<dd>Аргумент amount указывает размер горизонтальных
|
||
внутренних полей, которые должны быть с обеих сторон
|
||
виджета slave. Размер должен быть указан в одной из форм,
|
||
в которой можно задавать размеры на экране, например,
|
||
<strong>2</strong> (2 пикселя) или <strong>.5c</strong>
|
||
(0.5 сантиметра). Значение по умолчанию 0.</dd>
|
||
|
||
<dt><strong>-ipady</strong> <em>amount</em></dt>
|
||
|
||
<dd>Аргумент <em>amount</em> указывает размер вертикальных
|
||
внутренних полей, которые должны быть с обеих сторон
|
||
виджета slave. Размер должен быть указан в одной из форм,
|
||
в которой можно задавать размеры на экране, например,
|
||
<strong>2</strong> (2 пикселя) или <strong>.5c</strong>
|
||
(0.5 сантиметра). Значение по умолчанию 0.</dd>
|
||
|
||
<dt><strong>-padx</strong> <em>amount</em></dt>
|
||
|
||
<dd>Аргумент <em>amount</em> указывает размер горизонтальных
|
||
внешних полей, которые должны быть с обеих сторон виджета
|
||
slave. Размер должен быть указан в одной из форм, в
|
||
которой можно задавать размеры на экране, например,
|
||
<strong>2</strong> (2 пикселя) или <strong>.5c</strong>
|
||
(0.5 сантиметра). Значение по умолчанию 0.</dd>
|
||
|
||
<dt><strong>-pady</strong> <em>amount</em></dt>
|
||
|
||
<dd>Аргумент <em>amount</em> указывает размер вертикальных
|
||
внешних полей, которые должны быть с обеих сторон виджета
|
||
slave. Размер должен быть указан в одной из форм, в
|
||
которой можно задавать размеры на экране, например,
|
||
<strong>2</strong> (2 пикселя) или <strong>.5c</strong>
|
||
(0.5 сантиметра). Значение по умолчанию 0.</dd>
|
||
|
||
<dt><strong>-side</strong> <em>side</em></dt>
|
||
|
||
<dd>Определяет, к какой стороне мастер-окна будут помещены
|
||
виджеты slave. Возможные значения аргумента <em>side</em>:
|
||
<strong>left</strong>, <strong>right</strong>,
|
||
<strong>top</strong> или <strong>bottom</strong>. Значение
|
||
по умолчанию <strong>top</strong>.</dd>
|
||
</dl>
|
||
|
||
<p>Если никакая из опций <strong>-in</strong>,
|
||
<strong>-after</strong> или <strong>-before</strong> не
|
||
указана, каждый из <em>slave</em> будет внесен в конец
|
||
списка размещения своего непосредственного родителя (если
|
||
только он не был внесен туда ранее, в этом случае он
|
||
останется на своем прежнем месте). Если же одна из
|
||
перечисленных опций указана, все <em>slave</em> будут
|
||
внесены в соответствующий список в указанное место.</p>
|
||
|
||
<p>Если какие-либо из <em>slave</em> окон ранее уже
|
||
обрабатывались геометрическим менеджером, то для не
|
||
определенных в команде опций будут использоваться старые
|
||
значения, а не значения по умолчанию.</p>
|
||
</dd>
|
||
|
||
<dt><strong>pack forget</strong> <em>slave</em> ?<em>slave ...</em>?</dt>
|
||
|
||
<dd>Перечисленные окна удаляются из списка упаковки и с
|
||
экрана. Эти окна больше не управляются геометрическим
|
||
менеджером.</dd>
|
||
|
||
<dt><strong>pack info</strong> <em>slave</em></dt>
|
||
|
||
<dd>Возвращает список опций и их значений для окна
|
||
<em>slave</em> в той же форме, в какой они задаются в команде
|
||
<strong>pack configure</strong>. Первые два элемента списка
|
||
"<strong>-in</strong> <em>master</em>", где
|
||
"<em>master</em>" - имя окна, в котором размещается
|
||
<em>slave</em>.</dd>
|
||
|
||
<dt><strong>pack propagate</strong> <em>master</em>
|
||
?<em>boolean</em>?</dt>
|
||
|
||
<dd>Аргумент <em>boolean</em>, если он задан, определяет, будет
|
||
ли окно <em>master</em> расширяться при необходимости
|
||
(подробности приведены ниже, см. "<a href=
|
||
"#РАСШИРЕНИЕ_ВИДЖЕТОВ">Расширение виджетов</a>"). Команда
|
||
при этом возвращает пустую строку. Если аргумент не задан,
|
||
команда возвращает текущее значение опции (<strong>0</strong>
|
||
или <strong>1</strong>). По умолчанию расширение
|
||
разрешено.</dd>
|
||
|
||
<dt><strong>pack slaves</strong> <em>master</em></dt>
|
||
|
||
<dd>Возвращает список всех размещаемых окон для
|
||
<em>master</em>. Если в окне <em>master</em> нет размещаемых
|
||
окон, возвращается пустой список.</dd>
|
||
</dl>
|
||
|
||
|
||
<h2><a name="АЛГОРИТМ_УПАКОВКИ_PACK"></a>АЛГОРИТМ УПАКОВКИ pack</h2>
|
||
|
||
<p>Для каждого мастер-окна менеджер pack формирует список
|
||
упаковки. Место каждого виджета в нем может задаваться с помощью
|
||
опций <strong>-in</strong>, <strong>-after</strong> и
|
||
<strong>-before</strong>. Если эти опции не использовались,
|
||
каждый новый виджет добавляется в конец списка своего
|
||
непосредственного предка.</p>
|
||
|
||
<p>Менеджер размещает виджеты в окне, последовательно просматривая
|
||
список упаковки. В момент обработки каждого из размещаемых
|
||
виджетов внутри мастера есть прямоугольная незаполненная
|
||
область. Эта область называется "полость". Для первого
|
||
обрабатываемого виджета "полость" совпадает со всей
|
||
внутренностью мастер-окна.</p>
|
||
|
||
<p>Для каждого из размещаемых виджетов выполняются следующие
|
||
действия:</p>
|
||
|
||
<ul>
|
||
<li>менеджер размещает прямоугольную область для очередного
|
||
виджета у стороны полости, заданной опцией
|
||
<strong>-side</strong>. Если значение опции
|
||
<strong>top</strong> или <strong>bottom</strong>, то ширина
|
||
области равна ширине полости, а высота равна требуемой для
|
||
виджета высоте плюс внешние и внутренние поля, заданные
|
||
опциями <strong>-ipady</strong> и <strong>-pady</strong>. Если
|
||
значение опции равно <strong>left</strong> или
|
||
<strong>right</strong>, высота области равна высоте полости, а
|
||
ширина определяется размером виджета плюс полями, заданными
|
||
опциями <strong>-ipadx</strong> и
|
||
<strong>-padx</strong>. Область может быть расширена в одном
|
||
или обоих направлениях в зависимости от значения опции
|
||
<strong>-expand</strong> (см. ниже "<a
|
||
href="#РАСШИРЕНИЕ_ВИДЖЕТОВ">Расширение
|
||
виджетов</a>").</li>
|
||
|
||
<li>менеджер определяет размеры виджета. Обычно они равны
|
||
размерам, необходимым для виджета, плюс удвоенные внутренние
|
||
поля, но могут быть расширены до размеров области (минус
|
||
удвоенные внешние поля) по одному или обоим направлениям в
|
||
зависимости от значения опции <strong>-fill</strong>.</li>
|
||
|
||
<li>менеджер размещает виджет в отведенном ему
|
||
пространстве. Если виджет меньше свободного пространства,
|
||
используется значение опции <strong>-anchor</strong>. Если
|
||
определены внешние поля, то они всегда сохраняются между
|
||
виджетом и границами области, в которой он помещается.</li>
|
||
</ul>
|
||
|
||
|
||
<p>После того, как очередной виджет размещен, выделенная ему
|
||
область (см. <a href="">1</a>)) вычитается из полости. Полость
|
||
для следующего виджета остается прямоугольной, но меньшей по
|
||
размеру. Если виджет не занял полностью выделенную ему область,
|
||
ее оставшиеся свободными части не используются при размещении
|
||
последующих виджетов. Если полость оказывается мала для
|
||
очередного виджета, он получает столько пространства, сколько
|
||
осталось. Если полость сокращается до нуля, все оставшиеся
|
||
виджеты в списке упаковки удаляются с экрана. Если размеры окна
|
||
будут увеличены, они появятся на экране.</p>
|
||
|
||
<h2><a name="РАСШИРЕНИЕ_ВИДЖЕТОВ"></a>РАСШИРЕНИЕ ВИДЖЕТОВ</h2>
|
||
|
||
|
||
<p>Если мастер-окно оказалось больше, чем необходимо для
|
||
размещения всех виджетов, оставшееся пространство распределяется
|
||
равномерно между теми виджетами, для которых установлена опция
|
||
<strong>-expand</strong>. Дополнительное горизонтальное
|
||
пространство распределяется между теми виджетами, у которых
|
||
опция <strong>-side</strong> равна <strong>left</strong> или
|
||
<strong>right</strong>. Вертикальное пространство распределяется
|
||
между виджетами, у которых опция <strong>-side</strong> равна
|
||
<strong>top</strong> или <strong>bottom</strong>.</p>
|
||
|
||
<h2><a name="РАСПРОСТРАНЕНИЕ_РАЗМЕРОВ"></a>РАСПРОСТРАНЕНИЕ РАЗМЕРОВ</h2>
|
||
|
||
<p>Обычно менеджер рассчитывает размеры мастер-окна, необходимые
|
||
для размещения виджетов, и, при необходимости, устанавливает
|
||
размеры мастер-окна таким образом, чтобы в нем в точности
|
||
поместились все виджеты из списка. Это приводит к тому, что
|
||
информация о размерах виджетов распространяется по
|
||
иерархическому дереву виджетов, в результате чего целое
|
||
поддерево изменяет свои размеры при изменении одного из
|
||
листьевых элементов. Однако команда <strong>pack
|
||
propagate</strong> может быть использована для отключения этого
|
||
механизма для одного или нескольких мастер-окон. Если
|
||
распространение размеров отключено, информация о необходимых
|
||
размерах не передается мастер-окну. Это может оказаться
|
||
полезным, если вы хотите, чтобы мастер-окно сохраняло те
|
||
размеры, которые вы определили.</p>
|
||
|
||
<h2><a name="ОГРАНИЧЕНИЯ_НА_МАСТЕРОКНА"></a>ОГРАНИЧЕНИЯ НА МАСТЕР-ОКНА</h2>
|
||
|
||
<p>Мастер-окно для каждого размещаемого виджета должно быть его
|
||
непосредственным предком (по умолчанию) или одним из потомков
|
||
его предка. Это ограничение гарантирует разумное поведение
|
||
виджетов при удалении toplevel-окон.</p>
|
||
|
||
<h2><a name="ПОРЯДОК_РАЗМЕЩЕНИЯ"></a>ПОРЯДОК РАЗМЕЩЕНИЯ</h2>
|
||
|
||
<p>Если мастер-окно для виджета не является его непосредственным
|
||
предком, необходимо быть уверенным, что виджет лежит в стеке
|
||
окон выше, чем мастер-окно. В противном случае мастер-окно
|
||
закроет собой виджет и создастся впечатление, что виджет не
|
||
упакован правильным образом. Простейший способ избежать подобных
|
||
проблем следить, чтобы -окно было создано раньше, чем виджет
|
||
(чем позже создано окно, тем выше оно в стеке). Если это
|
||
почему-либо неудобно, можно использовать команды
|
||
<strong>raise</strong> и <strong>lower</strong> для изменения
|
||
порядка окон в стеке.</p>
|
||
</body>
|
||
</html>
|
||
|
||
|
||
|