335 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			335 lines
		
	
	
		
			21 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>
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | 
