projman/hlp/ru/tk/pack.html
2015-10-19 14:27:31 +04:00

334 lines
14 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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>Если первый аргумент команды является именем окна (любая
величина, начинающаяся с &quot;.&quot;), команда выполняется
точно также, как команда <strong>pack configure.</strong></dd>
<dt><strong>pack configure</strong> <em>slave</em>
?<em>slave</em> ...? ?<em>options</em>?</dt>
<dd><p>Аргумент команды состоит из имени одного или нескольких
размещаемых виджетов, после которых идут пары аргументов,
состоящих из имени опции и ее значения. Подробное описание
действий, выполняемых при размещении виджетов приведено ниже
(см. &quot;<a href="#АЛГОРИТМ_РАЗМЕЩЕНИЯ_pack">Алгоритм
упаковки <em>pack</em></a>&quot;). Ниже перечислены
возможные опции команды.</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>. Значение по умолчанию
&quot;0&quot;.</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>. Первые два элемента списка
&quot;<strong>-in</strong> <em>master</em>&quot;, где
&quot;<em>master</em>&quot; - имя окна, в котором размещается
<em>slave</em>.</dd>
<dt><strong>pack propagate</strong> <em>master</em>
?<em>boolean</em>?</dt>
<dd>Аргумент <em>boolean</em>, если он задан, определяет, будет
ли окно <em>master</em> расширяться при необходимости
(подробности приведены ниже, см. &quot;<a href=
"#РАСШИРЕНИЕ_ВИДЖЕТОВ">Расширение виджетов</a>&quot;). Команда
при этом возвращает пустую строку. Если аргумент не задан,
команда возвращает текущее значение опции (<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>Менеджер размещает виджеты в окне, последовательно просматривая
список упаковки. В момент обработки каждого из размещаемых
виджетов внутри мастера есть прямоугольная незаполненная
область. Эта область называется &quot;полость&quot;. Для первого
обрабатываемого виджета &quot;полость&quot; совпадает со всей
внутренностью мастер-окна.</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> (см. ниже &quot;<a
href="#РАСШИРЕНИЕ_ВИДЖЕТОВ">Расширение
виджетов</a>&quot;).</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>