Provided by: tk8.6-doc_8.6.13-2_all bug

NAME

       pack - Geometry manager that packs around edges of cavity

SYNOPSIS

       pack option arg ?arg ...?
_________________________________________________________________________________________________

DESCRIPTION

       The  pack command is used to communicate with the packer, a geometry manager that arranges
       the children of a parent by packing them in order around the edges  of  the  parent.   The
       pack command can have any of several forms, depending on the option argument:

       pack window ?window ...? ?options?
              If  the first argument to pack is a window name (any value starting with “.”), then
              the command is processed in the same way as pack configure.

       pack configure window ?window ...? ?options?
              The arguments consist of the names of one or more content windows followed by pairs
              of  arguments  that  specify  how  to manage the content.  See THE PACKER ALGORITHM
              below for details on how the options are used by the packer.  The following options
              are supported:

              -after other
                     Other  must  the name of another window.  Use its container as the container
                     for the content, and insert the content just  after  other  in  the  packing
                     order.

              -anchor anchor
                     Anchor  must  be a valid anchor position such as n or sw; it specifies where
                     to position each content in its parcel.  Defaults to center.

              -before other
                     Other must the name of another window.  Use its container as  the  container
                     for  the  content,  and  insert the content just before other in the packing
                     order.

              -expand boolean
                     Specifies whether the content should be expanded to consume extra  space  in
                     their  container.   Boolean  may have any proper boolean value, such as 1 or
                     no.  Defaults to 0.

              -fill style
                     If a content's parcel is larger than its requested dimensions,  this  option
                     may  be  used  to stretch the content.  Style must have one of the following
                     values:

                     none   Give the content its requested dimensions plus any  internal  padding
                            requested with -ipadx or -ipady.  This is the default.

                     x      Stretch  the  content  horizontally  to  fill the entire width of its
                            parcel (except leave external padding as specified by -padx).

                     y      Stretch the content vertically to  fill  the  entire  height  of  its
                            parcel (except leave external padding as specified by -pady).

                     both   Stretch the content both horizontally and vertically.

              -in container
                     Insert  the  window at the end of the packing order for the container window
                     given by container.

              -ipadx amount
                     Amount specifies how much horizontal internal padding to leave on each  side
                     of  the  content.  Amount must be a valid screen distance, such as 2 or .5c.
                     It defaults to 0.

              -ipady amount
                     Amount specifies how much vertical internal padding to leave on each side of
                     the content.  Amount  defaults to 0.

              -padx amount
                     Amount  specifies how much horizontal external padding to leave on each side
                     of the content.  Amount may be a list of two values to specify  padding  for
                     left and right separately.  Amount defaults to 0.

              -pady amount
                     Amount specifies how much vertical external padding to leave on each side of
                     the content.  Amount may be a list of two values to specify padding for  top
                     and bottom separately.  Amount defaults to 0.

              -side side
                     Specifies  which  side  of the container the content will be packed against.
                     Must be left, right, top, or bottom.  Defaults to top.

              If no -in, -after or -before option is specified then each of the content  will  be
              inserted at the end of the packing list for its parent unless it is already managed
              by the packer (in which case it will be left where it is).  If one of these options
              is  specified then all the content will be inserted at the specified point.  If any
              of the content are already managed by the geometry  manager  then  any  unspecified
              options for them retain their previous values rather than receiving default values.

       pack forget window ?window ...?
              Removes  each  of  the  windows from the packing order for its container and unmaps
              their windows.  The content will no longer be managed by the packer.

       pack info window
              Returns a list whose elements are the current configuration  state  of  the  window
              given  by  window  in  the  same  option-value form that might be specified to pack
              configure.  The first two elements of the list are “-in container” where  container
              is the window's container.

       pack propagate container ?boolean?
              If boolean has a true boolean value such as 1 or on then propagation is enabled for
              container, which must be a  window  name  (see  GEOMETRY  PROPAGATION  below).   If
              boolean  has  a false boolean value then propagation is disabled for container.  In
              either of these cases an empty string is returned.  If boolean is omitted then  the
              command  returns  0  or  1 to indicate whether propagation is currently enabled for
              container.  Propagation is enabled by default.

       pack slaves window
              Returns a list of all of the content windows in the packing order for window.   The
              order  of the content windows in the list is the same as their order in the packing
              order.  If window has no content then an empty string is returned.                  │

       pack content window                                                                        │
              Synonym for pack slaves window.

THE PACKER ALGORITHM

       For each container the packer maintains an ordered list  of  content  windows  called  the
       packing  list.  The -in, -after, and -before configuration options are used to specify the
       container for each content and the content's position in the packing  list.   If  none  of
       these  options  is given for a content then the content is added to the end of the packing
       list for its parent.

       The packer arranges the content windows for a container by scanning the  packing  list  in
       order.   At the time it processes each content, a rectangular area within the container is
       still unallocated.  This area is called the cavity;  for  the  first  content  it  is  the
       entire area of the container.

       For each content the packer carries out the following steps:

       [1]    The  packer  allocates  a  rectangular parcel for the content along the side of the
              cavity given by the content's -side option.  If the side is top or bottom then  the
              width  of  the  parcel  is  the width of the cavity and its height is the requested
              height of the content plus the -ipady and -pady options.  For  the  left  or  right
              side  the  height  of  the  parcel is the height of the cavity and the width is the
              requested width of the content plus the -ipadx and -padx options.  The  parcel  may
              be enlarged further because of the -expand option (see EXPANSION below)

       [2]    The  packer  chooses the dimensions of the content.  The width will normally be the
              content's requested width plus twice its -ipadx option and the height will normally
              be  the  content's  requested height plus twice its -ipady option.  However, if the
              -fill option is x or both then the width of the content is  expanded  to  fill  the
              width  of  the  parcel,  minus twice the -padx option.  If the -fill option is y or
              both then the height of the content is expanded to fill the width  of  the  parcel,
              minus twice the -pady option.

       [3]    The  packer  positions the content over its parcel.  If the content is smaller than
              the parcel then the -anchor option determines where in the parcel the content  will
              be  placed.   If  -padx  or  -pady  is  non-zero, then the given amount of external
              padding will always be left between the content and the edges of the parcel.

       Once a given content has been packed, the area  of  its  parcel  is  subtracted  from  the
       cavity,  leaving a smaller rectangular cavity for the next content.  If a content does not
       use all of its parcel, the unused space in the parcel  will  not  be  used  by  subsequent
       content.   If  the  cavity should become too small to meet the needs of a content then the
       content will be given whatever space is left in the cavity.  If the cavity shrinks to zero
       size,  then  all  remaining  content  on the packing list will be unmapped from the screen
       until the container window becomes large enough to hold them again.

   EXPANSION
       If a container window is so large that there will be extra space left over  after  all  of
       its  content  have been packed, then the extra space is distributed uniformly among all of
       the content for which the -expand option is set.  Extra horizontal  space  is  distributed
       among  the  expandable  content  whose -side is left or right, and extra vertical space is
       distributed among the expandable content whose -side is top or bottom.

   GEOMETRY PROPAGATION
       The packer normally computes how large a container must be to just exactly meet the  needs
       of  its  content,  and  it  sets  the requested width and height of the container to these
       dimensions.  This causes geometry information to propagate up through a  window  hierarchy
       to  a  top-level  window  so that the entire sub-tree sizes itself to fit the needs of the
       leaf windows.  However, the pack propagate command may be used to turn off propagation for
       one  or  more  containers.   If  propagation  is disabled then the packer will not set the
       requested width and height of the packer.  This may be useful if, for  example,  you  wish
       for a container window to have a fixed size that you specify.

RESTRICTIONS ON CONTAINER WINDOWS

       The  container  for  each  content  must either be the content's parent (the default) or a
       descendant of the content's parent.  This restriction is necessary to guarantee  that  the
       content can be placed over any part of its container that is visible without danger of the
       content being clipped by its parent.

PACKING ORDER

       If the container for a content is not its parent then you must make sure that the  content
       is  higher in the stacking order than the container.  Otherwise the container will obscure
       the content and it will appear as if the content  has  not  been  packed  correctly.   The
       easiest  way  to  make  sure  the  content  is  higher than the container is to create the
       container window first:  the most recently created window will be highest in the  stacking
       order.   Or,  you  can  use  the  raise and lower commands to change the stacking order of
       either the container or the content.

EXAMPLE

              # Make the widgets
              label .t -text "This widget is at the top"    -bg red
              label .b -text "This widget is at the bottom" -bg green
              label .l -text "Left\nHand\nSide"
              label .r -text "Right\nHand\nSide"
              text .mid
              .mid insert end "This layout is like Java's BorderLayout"
              # Lay them out
              pack .t   -side top    -fill x
              pack .b   -side bottom -fill x
              pack .l   -side left   -fill y
              pack .r   -side right  -fill y
              pack .mid -expand 1    -fill both

SEE ALSO

       grid(3tk), place(3tk)

KEYWORDS

       geometry manager, location, packer, parcel, propagation, size