# pack-old

Устаревшая команда для геометрического менеджера упаковки окон.

## СИНТАКСИС

          pack after sibling окно параметры ?окно параметры...?
          pack append parent окно параметры ?окно параметры...?
          pack before sibling окно параметры ?окно параметры...?
          pack unpack окно

## ОПИСАНИЕ

Замечание. Ниже описан синтаксис команды pack, употреблявшейся в версиях Tk до 3.3. Хотя в целях совместимости поддержка команды в системе сохранена, команда является устаревшей и использовать ее не следует. Возможно, в будущем ее поддержка прекратится.

Упаковщик представляет собой геометрический менеджер, предназначенный для размещения непосредственных потомков примитива по сторонам примитива в порядке их появления. Первый потомок размещается вдоль одной стороны примитива, занимая всю протяженность окна вдоль этой стороны. В результате, для следующих потомков остается усеченное окно, как если бы выбранная сторона сдвинулась внутрь на размер первого потомка. Вдоль одной из сторон оставшейся области размещается второй потомок, и так далее до тех пор, пока не будут размещены все потомки или пока не исчерпается свободное место.

Формы before, after и append команды pack используются для вставки одного или нескольких непосредственных потомков в очередь упаковки их родителя. В форме before команда вставляет окно-потомка перед родственными узлами; все остальные окна должны быть узлами одного уровня. В форме after окна вставляются после родственных узлов, а в форме append добавляет одно или несколько окон к очереди упаковки их родителя. Если окно, указанное в любой из этих команд уже упаковано в родительское окно, то оно удаляется со своего текущего положения в порядке упаковки и перемещается в соответствии с командой. Все эти команды возвращают в качестве результата пустую строку.

Форма unpack команды pack command удаляет окно из очереди упаковки его родителя и стирает его с экрана. После выполнения этой команды упаковщик более не управляет геометрией окна.

На самом деле, размещение каждого потомка представляет собой четырехступенчатую процедуру; значение параметра, следующего за окном, представляет собой список из одного или нескольких полей, управляющих размещением окна. В нижеследующем обсуждении термин полость (cavity) обозначает место в окне-родителе, оставшееся после размещения конкретного потомка (т.е. все то место, которое не было запрошено при размещении предыдущих потомков в очереди). Термин доля (parcel) обозначает количество места, отведенного конкретному потомку; это количество не обязательно соответствует окончательной геометрии окна-потомка.

Первый шаг в размещении потомка состоит в выборе стороны полости, вдоль которой он будет располагаться. Для указания стороны можно пользоваться любым из следующих параметров:

top
  Отводит долю потомка у верхней стороны полости на всю ширину полости.
bottom
  Отводит долю потомка у нижней стороны полости на всю ширину полости.
left
  Отводит долю потомка у левой стороны полости на всю высоту полости.
right
  Отводит долю потомка у правой стороны полости на всю высоту полости.

Для каждого окна следует задать ровно один из этих параметров. Значением стороны по умолчанию является top. Второй шаг состоит в определении доли потомка. Для верхнего и нижнего окон желательная ширина доли обычно совпадает с шириной полости, а желательная высота совпадает с запрошенной высотой доли, которая передается команде Tk_GeometryRequest. Для левого и правого окон желательная высота доли обычно совпадает с высотой полости, а желательная ширина совпадает с запрошенной шириной доли. Однако с помощью каждого из описанных ниже параметров для окна можно запросить дополнительное место:

padx число
  Добавляет число пикселей к запрошенной ширине окна перед вычислением размера доли, как это было описано выше.
pady число
  Добавляет число пикселей к запрошенной высоте окна перед вычислением размера доли, как это было описано выше.
expand
  Этот параметр указывает на то, что доля окна захватывает все свободное пространство, оставшееся в полости окна-родителя после упаковки всех его потомков. Размер оставшегося пространства зависит от размеров, запрошенных для всех потомков; он может равняться нулю. Если расширения (expand) затребовали несколько окон, то вся дополнительная ширина будет поделена поровну между всеми левыми и правыми окнами, запросившими расширение, а вся дополнительная высота будет поделена поровну между всеми верхними и нижними окнами, запросившими расширение.

Если желаемая ширина или высота превосходит соответствующую протяженность полости, то вместо нее используется эта размер этой протяженности.

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

fill
  Делает размеры окна равными размерам доли.
fillx
  Увеличивает ширину окна до ширины доли, сохраняя высоту окна.
filly
  Увеличивает высоту окна до высоты доли, сохраняя ширину окна.

На последнем этапе происходит размещение окна внутри его доли. Если размеры окна и доли совпадают, то окно просто целиком заполняет долю. Если доля больше окна, то положение окна определяется с помощью одного из следующих параметров:

frame center
  Размещает окно по центру доли. Если параметр размещения опущен, то центральное размещение принимается по умолчанию.
frame n
  Размещает окно так, что его верхняя сторона располагается по центру верхней стороны доли.
frame ne
  Размещает окно так, что его правый верхний угол располагается в правом верхнем углу доли.
frame e
  Размещает окно так, что его правая сторона располагается по центру правой стороны доли.
frame se
  Размещает окно так, что его правый нижний угол располагается в правом нижнем углу доли.
frame s
  Размещает окно так, что его нижняя сторона располагается по центру нижней стороны доли.
frame sw
  Размещает окно так, что его левый нижний угол располагается в левом нижнем углу доли.
frame w
  Размещает окно так, что его левая сторона располагается по центру левой стороны доли.
frame nw
  Размещает окно так, что его левый верхний угол располагается в левом верхнем углу доли.

Упаковщик управляет состоянием размещенный/неразмещенный всех упакованных непосредственных окон-потомков. При упаковке окон упаковщик автоматически выводит их на экран; кроме того, он стирает окна, для которых в полости остается недостаточно места.

Упаковщик посылает геометрические запросы от имени родителя размещаемых окон. Для каждого окна-родителя он запрашивает размер, достаточный для размещения всех упакованных потомков в соответствии с указанными параметрами, так что на расширение остается нулевой остаток.