Устаревшая команда для геометрического менеджера упаковки окон.
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. Второй шаг состоит в определении доли потомка. Для верхнего и нижнего окон желательная ширина доли обычно совпадает с шириной полости, а желательная высота совпадает с запрошенной высотой доли, которая передается команде Tk_GeometryRequest. Для левого и правого окон желательная высота доли обычно совпадает с высотой полости, а желательная ширина совпадает с запрошенной шириной доли. Однако с помощью каждого из описанных ниже параметров для окна можно запросить дополнительное место:
Если желаемая ширина или высота превосходит соответствующую протяженность полости, то вместо нее используется эта размер этой протяженности.
На третьем шаге размещения окна следует принять решение о его ширине и высоте. По умолчанию окно получает либо запрошенные ширину и высоту, либо ширину и высоту доли в зависимости от того, что из них меньше. Если доля больше, чем запрошенный размер окна, то окно можно расширить так, чтобы оно полностью или частично покрывало долю, с помощью следующих параметров:
На последнем этапе происходит размещение окна внутри его доли. Если размеры окна и доли совпадают, то окно просто целиком заполняет долю. Если доля больше окна, то положение окна определяется с помощью одного из следующих параметров:
Упаковщик управляет состоянием размещенный/неразмещенный всех упакованных непосредственных окон-потомков. При упаковке окон упаковщик автоматически выводит их на экран; кроме того, он стирает окна, для которых в полости остается недостаточно места.
Упаковщик посылает геометрические запросы от имени родителя размещаемых окон. Для каждого окна-родителя он запрашивает размер, достаточный для размещения всех упакованных потомков в соответствии с указанными параметрами, так что на расширение остается нулевой остаток.