dwww Home | Manual pages | Find package

Listbox(3pm)          User Contributed Perl Documentation          Listbox(3pm)

NAME
       Tk::Listbox - Create and manipulate Listbox widgets

SYNOPSIS
       $listbox = $parent->Listbox(?options?);

STANDARD OPTIONS
       -background -borderwidth -cursor -disabledforeground -exportselection
       -font -foreground -height -highlightbackground -highlightcolor
       -highlightthickness -offset -relief -selectbackground -selectborderwidth
       -selectforeground -setgrid -state -takefocus -tile -width
       -xscrollcommand -yscrollcommand

       See Tk::options for details of the standard options.

WIDGET-SPECIFIC OPTIONS
       Name:     activeStyle
       Class:    ActiveStyle
       Switch:   -activestyle
           Specifies  the  style in which to draw the active element. This must
           be one of dotbox (show a focus ring around the active element), none
           (no special indication of active element)  or  underline  (underline
           the active element). The default is underline.

       Name:     height
       Class:    Height
       Switch:   -height
           Specifies  the  desired height for the window, in lines.  If zero or
           less, then the desired height for the  window  is  made  just  large
           enough to hold all the elements in the listbox.

       Name:     listVariable
       Class:    Variable
       Switch:   -listvariable
           The following is only partially implemented in Perl/Tk:

           Specifies  the reference of a variable. The value of the variable is
           an array to be displayed inside the widget; if  the  variable  value
           changes  then the widget will automatically update itself to reflect
           the new value. Attempts to assign a variable with  an  invalid  list
           value  to  -listvariable  will  cause  an error. Attempts to unset a
           variable in use as a -listvariable will fail but will  not  generate
           an error.

       Name:     selectMode
       Class:    SelectMode
       Switch:   -selectmode
           Specifies one of several styles for manipulating the selection.  The
           value  of  the  option  may  be  arbitrary, but the default bindings
           expect it to be either single, browse, multiple, or  extended;   the
           default value is browse.

       Name:     state
       Class:    State
       Switch:   -state
           Specifies one of two states for the listbox: normal or disabled.  If
           the  listbox  is disabled then items may not be inserted or deleted,
           items are drawn in  the  -disabledforeground  color,  and  selection
           cannot be modified and is not shown (though selection information is
           retained).

       Name:     width
       Class:    Width
       Switch:   -width
           Specifies  the  desired  width for the window in characters.  If the
           font doesn't have a uniform width then the width  of  the  character
           ``0''  is  used in translating from character units to screen units.
           If zero or less, then the desired width for the window is made  just
           large enough to hold all the elements in the listbox.

DESCRIPTION
       The  Listbox method creates a new window (given by the $widget argument)
       and makes it into  a  listbox  widget.   Additional  options,  described
       above, may be specified on the command line or in the option database to
       configure  aspects  of  the  listbox such as its colors, font, text, and
       relief.  The listbox command returns its $widget argument.  At the  time
       this  command  is  invoked, there must not exist a window named $widget,
       but $widget's parent must exist.

       A listbox is a widget that displays a list of  strings,  one  per  line.
       When  first  created,  a  new  listbox has no elements.  Elements may be
       added or deleted using methods described below.   In  addition,  one  or
       more  elements  may  be  selected  as  described below.  If a listbox is
       exporting its selection  (see  exportSelection  option),  then  it  will
       observe  the standard X11 protocols for handling the selection.  Listbox
       selections are available as type STRING; the value of the selection will
       be the text of the  selected  elements,  with  newlines  separating  the
       elements.

       It  is not necessary for all the elements to be displayed in the listbox
       window at once;  commands described below may be used to change the view
       in the window.  Listboxes allow scrolling in both directions  using  the
       standard  xScrollCommand  and yScrollCommand options.  They also support
       scanning, as described below.

INDICES
       Many of the methods for listboxes take one or more indices as arguments.
       An index specifies a particular element of the listbox, in  any  of  the
       following ways:

       number
           Specifies  the  element as a numerical index, where 0 corresponds to
           the first element in the listbox.

       active
           Indicates the element that has the location  cursor.   This  element
           will  be  displayed  with  an  underline  when  the  listbox has the
           keyboard focus, and it is specified with the activate method.

       anchor
           Indicates the anchor point for the selection, which is set with  the
           selection anchor method.

       end Indicates  the end of the listbox.  For most commands this refers to
           the last element in the listbox, but for  a  few  commands  such  as
           index and insert it refers to the element just after the last one.

       @x,y
           Indicates  the  element  that covers the point in the listbox window
           specified by x and y (in pixel coordinates).  If no  element  covers
           that point, then the closest element to that point is used.

       In the method descriptions below, arguments named index, first, and last
       always contain text indices in one of the above forms.

WIDGET METHODS
       The  Listbox  method  creates a widget object.  This object supports the
       configure and cget methods described in Tk::options which can be used to
       enquire and  modify  the  options  described  above.   The  widget  also
       inherits all the methods provided by the generic Tk::Widget class.

       The following additional methods are available for listbox widgets:

       $listbox->activate(index)
           Sets  the active element to the one indicated by index.  If index is
           outside the range of  elements  in  the  listbox  then  the  closest
           element is activated.  The active element is drawn with an underline
           when  the widget has the input focus, and its index may be retrieved
           with the index active.

       $listbox->bbox(index)
           Returns a list of four numbers describing the bounding  box  of  the
           text  in  the element given by index.  The first two elements of the
           list give the x and y coordinates of the upper-left  corner  of  the
           screen area covered by the text (specified in pixels relative to the
           widget)  and  the last two elements give the width and height of the
           area, in pixels.  If no part  of  the  element  given  by  index  is
           visible on the screen, or if index refers to a non-existent element,
           then  the  result  is  an empty string;  if the element is partially
           visible, the result gives the full area of  the  element,  including
           any parts that are not visible.

       $listbox->curselection
           Returns  a  list  containing  the  numerical  indices  of all of the
           elements in the listbox that are currently selected.  If  there  are
           no  elements  selected  in  the  listbox  then  an  empty  string is
           returned.

       $listbox->delete(first, ?last?)
           Deletes one or more elements of the listbox.   First  and  last  are
           indices  specifying  the  first  and  last  elements in the range to
           delete.  If last isn't specified it defaults to first, i.e. a single
           element is deleted.

       $listbox->get(first, ?last?)
           If last is omitted, returns the  contents  of  the  listbox  element
           indicated  by  first,  or  an empty string if first refers to a non-
           existent element.  If last is specified, the command returns a  list
           whose  elements  are  all  of the listbox elements between first and
           last, inclusive.  Both first and last may have any of  the  standard
           forms for indices.

       $listbox->index(index)
           Returns the integer index value that corresponds to index.  If index
           is  end the return value is a count of the number of elements in the
           listbox (not the index of the last element).

       $listbox->insert(index, ?element, element, ...?)
           Inserts zero or more new  elements  in  the  list  just  before  the
           element  given  by index.  If index is specified as end then the new
           elements are added to the end of the list.  Returns an empty string.

       $listbox->itemcget(index, option)
           Returns the current value of the item configuration option given  by
           option.  Option  may  have any of the values accepted by the listbox
           itemconfigure command.

       $listbox->itemconfigure(index, ?option, value, option, value, ...?)
           Query or modify the configuration options of an item in the listbox.
           If no option is specified, returns a  list  describing  all  of  the
           available options for the item (see Tk_ConfigureInfo for information
           on  the  format of this list). If option is specified with no value,
           then the command returns a list  describing  the  one  named  option
           (this  list  will  be  identical to the corresponding sublist of the
           value returned if no option is specified). If one  or  more  option-
           value  pairs  are  specified,  then  the  command modifies the given
           widget option(s) to have  the  given  value(s);  in  this  case  the
           command returns an empty string. The following options are currently
           supported for items:

           -background => color
               Color  specifies the background color to use when displaying the
               item. It may have any of the forms accepted by Tk_GetColor.

           -foreground => color
               Color specifies the foreground color to use when displaying  the
               item. It may have any of the forms accepted by Tk_GetColor.

           -selectbackground => color
               Color  specifies the background color to use when displaying the
               item while it is selected. It may have any of the forms accepted
               by Tk_GetColor.

           -selectforeground => color
               Color specifies the foreground color to use when displaying  the
               item while it is selected. It may have any of the forms accepted
               by Tk_GetColor.

       $listbox->nearest(y)
           Given a y-coordinate within the listbox window, this command returns
           the   index  of  the  (visible)  listbox  element  nearest  to  that
           y-coordinate.

       $listbox->scan(option, args)
           This command is used to implement scanning on listboxes.  It has two
           forms, depending on option:

           $listbox->scanMark(x, y)
                   Records x and y and the current view in the listbox  window;
                   used   in  conjunction  with  later  scan  dragto  commands.
                   Typically this command is associated  with  a  mouse  button
                   press in the widget.  It returns an empty string.

           $listbox->scanDragto(x, y.)
                   This  command  computes  the  difference between its x and y
                   arguments and the x and y arguments to the  last  scan  mark
                   command  for  the  widget.   It  then adjusts the view by 10
                   times  the  difference  in  coordinates.   This  command  is
                   typically associated with mouse motion events in the widget,
                   to  produce  the  effect  of dragging the list at high speed
                   through the window.  The return value is an empty string.

       $listbox->see(index)
           Adjust the view in the listbox so that the element given by index is
           visible.  If the element is already visible then the command has  no
           effect;  if  the  element  is  near  one edge of the window then the
           listbox scrolls  to  bring  the  element  into  view  at  the  edge;
           otherwise the listbox scrolls to center the element.

       $listbox->selection(option, arg)
           This  command  is used to adjust the selection within a listbox.  It
           has several forms, depending on option:

           $listbox->selectionAnchor(index)
                   Sets the selection anchor to the element given by index.  If
                   index refers to a non-existent  element,  then  the  closest
                   element  is  used.   The  selection anchor is the end of the
                   selection that is fixed while dragging out a selection  with
                   the  mouse.   The  index  anchor may be used to refer to the
                   anchor element.

           $listbox->selectionClear(first, ?last?)
                   If any of the elements between first  and  last  (inclusive)
                   are  selected,  they are deselected.  The selection state is
                   not changed for elements outside this range.

           $listbox->selectionIncludes(index)
                   Returns 1 if the element indicated  by  index  is  currently
                   selected, 0 if it isn't.

           $listbox->selectionSet(first, ?last?)
                   Selects  all  of the elements in the range between first and
                   last, inclusive, without affecting the  selection  state  of
                   elements outside that range.

       $listbox->size
           Returns  a decimal string indicating the total number of elements in
           the listbox.

       $listbox->xview(args)
           This command is used to query and change the horizontal position  of
           the  information  in  the  widget's  window.  It can take any of the
           following forms:

           $listbox->xview
                   Returns a list containing two elements.  Each element  is  a
                   real  fraction  between 0 and 1;  together they describe the
                   horizontal span that is visible in the window.  For example,
                   if the first element is .2 and the second element is .6, 20%
                   of the listbox's text is off-screen to the left, the  middle
                   40%  is  visible  in the window, and 40% of the text is off-
                   screen to the right.  These are the same  values  passed  to
                   scrollbars via the -xscrollcommand option.

           $listbox->xview(index)
                   Adjusts  the  view  in  the  window  so  that  the character
                   position given by index is displayed at the left edge of the
                   window.  Character positions are defined by the width of the
                   character 0.

           $listbox->xviewMoveto( fraction );
                   Adjusts the view in the window so that fraction of the total
                   width of  the  listbox  text  is  off-screen  to  the  left.
                   fraction must be a fraction between 0 and 1.

           $listbox->xviewScroll( number, what );
                   This  command  shifts  the  view in the window left or right
                   according to number and what.  Number must  be  an  integer.
                   What must be either units or pages or an abbreviation of one
                   of  these.  If what is units, the view adjusts left or right
                   by number character units (the width of the 0 character)  on
                   the display;  if it is pages then the view adjusts by number
                   screenfuls.   If  number is negative then characters farther
                   to  the  left  become  visible;   if  it  is  positive  then
                   characters farther to the right become visible.

       $listbox->yview(?args?)
           This  command  is  used to query and change the vertical position of
           the text in the widget's window.  It can take any of  the  following
           forms:

           $listbox->yview
                   Returns  a  list  containing two elements, both of which are
                   real fractions between 0 and 1.  The first element gives the
                   position of the listbox element at the top  of  the  window,
                   relative  to the listbox as a whole (0.5 means it is halfway
                   through the listbox, for example).  The second element gives
                   the position of the listbox element just after the last  one
                   in  the  window,  relative to the listbox as a whole.  These
                   are  the  same  values  passed   to   scrollbars   via   the
                   -yscrollcommand option.

           $listbox->yview(index)
                   Adjusts  the view in the window so that the element given by
                   index is displayed at the top of the window.

           $listbox->yviewMoveto( fraction );
                   Adjusts the view in the window so that the element given  by
                   fraction  appears  at  the top of the window.  Fraction is a
                   fraction between 0 and 1;  0 indicates the first element  in
                   the  listbox,  0.33  indicates the element one-third the way
                   through the listbox, and so on.

           $listbox->yviewScroll( number, what );
                   This command adjusts the view  in  the  window  up  or  down
                   according  to  number  and what.  Number must be an integer.
                   What must be either units or pages.  If what is  units,  the
                   view  adjusts  up  or  down by number lines;  if it is pages
                   then the view adjusts by number screenfuls.   If  number  is
                   negative  then  earlier  elements  become visible;  if it is
                   positive then later elements become visible.

DEFAULT BINDINGS
       Tk automatically creates class bindings for  listboxes  that  give  them
       Motif-like behavior.  Much of the behavior of a listbox is determined by
       its  selectMode  option,  which selects one of four ways of dealing with
       the selection.

       If the selection mode is single or browse, at most one  element  can  be
       selected in the listbox at once.  In both modes, clicking button 1 on an
       element  selects  it  and  deselects any other selected item.  In browse
       mode it is also possible to drag the selection with button 1.

       If the selection mode is multiple or extended, any  number  of  elements
       may  be  selected  at once, including discontiguous ranges.  In multiple
       mode, clicking button 1  on  an  element  toggles  its  selection  state
       without affecting any other elements.  In extended mode, pressing button
       1  on  an  element  selects  it, deselects everything else, and sets the
       anchor to the element under the mouse;  dragging the mouse with button 1
       down extends the selection to  include  all  the  elements  between  the
       anchor and the element under the mouse, inclusive.

       Most  people will probably want to use browse mode for single selections
       and extended mode for multiple selections; the other modes appear to  be
       useful only in special situations.

       Any  time  the  selection  changes  in  the  listbox,  the virtual event
       <<ListboxSelect>> will be generated. It is easiest to bind to this event
       to be made aware of any changes to listbox selection.

       In addition to the above behavior, the following additional behavior  is
       defined by the default bindings:

       [1] In  extended  mode,  the  selected range can be adjusted by pressing
           button 1 with the Shift key down:  this modifies  the  selection  to
           consist of the elements between the anchor and the element under the
           mouse,  inclusive.   The  un-anchored  end of this new selection can
           also be dragged with the button down.

       [2] In extended mode, pressing button 1 with the Control key down starts
           a toggle operation: the anchor is  set  to  the  element  under  the
           mouse,  and its selection state is reversed.  The selection state of
           other elements isn't changed.  If the mouse is dragged with button 1
           down, then the selection state of all elements  between  the  anchor
           and  the  element under the mouse is set to match that of the anchor
           element;  the selection state of all other elements remains what  it
           was before the toggle operation began.

       [3] If  the  mouse  leaves  the  listbox  window with button 1 down, the
           window scrolls away from the mouse, making information visible  that
           used  to  be  off-screen  on  the  side of the mouse.  The scrolling
           continues until the  mouse  re-enters  the  window,  the  button  is
           released, or the end of the listbox is reached.

       [4] Mouse  button  2  may  be  used  for scanning.  If it is pressed and
           dragged over the listbox, the contents of the listbox drag  at  high
           speed in the direction the mouse moves.

       [5] If  the  Up  or  Down  key  is  pressed, the location cursor (active
           element) moves up or down one element.  If  the  selection  mode  is
           browse  or extended then the new active element is also selected and
           all other elements are deselected.  In extended mode the new  active
           element becomes the selection anchor.

       [6] In  extended  mode, Shift-Up and Shift-Down move the location cursor
           (active element)  up  or  down  one  element  and  also  extend  the
           selection  to  that  element  in  a fashion similar to dragging with
           mouse button 1.

       [7] The Left and Right keys scroll the listbox view left  and  right  by
           the width of the character 0.  Control-Left and Control-Right scroll
           the  listbox  view  left  and  right  by  the  width  of the window.
           Control-Prior and Control-Next also scroll left  and  right  by  the
           width of the window.

       [8] The  Prior  and Next keys scroll the listbox view up and down by one
           page (the height of the window).

       [9] The Home and End keys scroll the listbox horizontally  to  the  left
           and right edges, respectively.

       [10]
           Control-Home  sets  the  location cursor to the the first element in
           the listbox, selects that element, and deselects everything else  in
           the listbox.

       [11]
           Control-End  sets the location cursor to the the last element in the
           listbox, selects that element, and deselects everything else in  the
           listbox.

       [12]
           In  extended  mode,  Control-Shift-Home extends the selection to the
           first element in  the  listbox  and  Control-Shift-End  extends  the
           selection to the last element.

       [13]
           In  multiple  mode,  Control-Shift-Home moves the location cursor to
           the first element in the listbox  and  Control-Shift-End  moves  the
           location cursor to the last element.

       [14]
           The  space  and  Select keys make a selection at the location cursor
           (active element) just as if mouse button 1  had  been  pressed  over
           this element.

       [15]
           In  extended  mode,  Control-Shift-space and Shift-Select extend the
           selection to the active element just as if button 1 had been pressed
           with the Shift key down.

       [16]
           In extended mode, the Escape key cancels the most  recent  selection
           and  restores  all  the  elements  in  the  selected  range to their
           previous selection state.

       [17]
           Control-slash selects everything in the widget, except in single and
           browse modes, in which  case  it  selects  the  active  element  and
           deselects everything else.

       [18]
           Control-backslash  deselects  everything  in  the  widget, except in
           browse mode where it has no effect.

       [19]
           The F16 key (labelled Copy  on  many  Sun  workstations)  or  Meta-w
           copies  the  selection in the widget to the clipboard, if there is a
           selection.

           The behavior of listboxes can be changed by  defining  new  bindings
           for individual widgets or by redefining the class bindings.

TIED INTERFACE
       The  Tk::Listbox  widget can also be tied to a scalar or array variable,
       with different behaviour  depending  on  the  variable  type,  with  the
       following tie commands:

          use Tk;

          my ( @array, $scalar, $other );
          my %options = ( ReturnType => "index" );

          my $MW = MainWindow->new();
          my $lbox = $MW->Listbox()->pack();

          my @list = ( "a", "b", "c", "d", "e", "f" );
          $lbox->insert('end', @list );

          tie @array, "Tk::Listbox", $lbox
          tie $scalar, "Tk::Listbox", $lbox;
          tie $other, "Tk::Listbox", $lbox, %options;

       currently  only  one  modifier  is  implemented,  a  3 way flag for tied
       scalars "ReturnType" which can have values "element", "index" or "both".
       The default is "element".

       Tied Arrays
           If you tie an array to the Listbox  you  can  manipulate  the  items
           currently contained by the box in the same manner as a normal array,
           e.g.

               print @array;
               push(@array, @list);
               my $popped = pop(@array);
               my $shifted = shift(@array);
               unshift(@array, @list);
               delete $array[$index];
               print $string if exists $array[$i];
               @array = ();
               splice @array, $offset, $length, @list

           The  delete  function  is  implemented slightly differently from the
           standard array implementation. Instead of  setting  the  element  at
           that  index  to  undef  it  instead  physically  removes it from the
           Listbox. This has the effect of changing the array indices,  so  for
           instance  if  you  had  a list on non-continuous indices you wish to
           remove from the Listbox you should reverse sort the  list  and  then
           apply the delete function, e.g.

                my @list = ( 1, 2, 4, 12, 20 );
                my @remove = reverse sort { $a <=> $b } @list;
                delete @array[@remove];

           would  safely  remove  indices  20,  12, 4, 2 and 1 from the Listbox
           without problems. It should also be noted  that  a  similar  warning
           applies to the splice function (which would normally be used in this
           context to perform the same job).

       Tied Scalars
           Unlike  tied  arrays,  if  you  tie  a scalar to the Listbox you can
           retrieve the currently selected elements in  the  box  as  an  array
           referenced by the scalar, for instance

               my @list = ( "a", "b", "c", "d", "e", "f" );
               $lbox->insert('end', sort @list );
               $lbox->selectionSet(1);

           inserts @list as elements in an already existing listbox and selects
           the element at index 1, which is "b". If we then

                print @$selected;

           this will return the currently selected elements, in this case "b".

           However,  if  the  "ReturnType"  argument  is  passed when tying the
           Listbox to the scalar with value "index" then  the  indices  of  the
           selected   elements   will  be  returned  instead  of  the  elements
           themselves,  ie  in  this  case  "1".  This  can  be   useful   when
           manipulating  both  contents and selected elements in the Listbox at
           the same time.

           Importantly, if a value "both" is given the scalar will not be  tied
           to  an array, but instead to a hash, with keys being the indices and
           values being the elements at those indices

           You can  also  manipulate  the  selected  items  using  the  scalar.
           Equating  the  scalar to an array reference will select any elements
           that match elements in the Listbox,  non-matching  array  items  are
           ignored, e.g.

               my @list = ( "a", "b", "c", "d", "e", "f" );
               $lbox->insert('end', sort @list );
               $lbox->selectionSet(1);

           would  insert  the  array @list into an already existing Listbox and
           select element at index 1, i.e. "b"

               @array = ( "a", "b", "f" );
               $selected = \@array;

           would select elements "a", "b" and "f" in the Listbox.

           Again, if the "index" we indicate we want  to  use  indices  in  the
           options hash then the indices are use instead of elements, e.g.

               @array = ( 0, 1, 5 );
               $selected = \@array;

           would  have  the same effect, selecting elements "a", "b" and "f" if
           the $selected variable was tied with  %options  =  (  ReturnType  =>
           "index" ).

           If  we  are returning "both", i.e. the tied scalar points to a hash,
           both key and value must match, e.g.

               %hash = ( 0 => "a", 1 => "b", 5 => "f" );
               $selected = \%hash;

           would have the same effect as the previous examples.

           It should be noted that, despite being a reference to an  array  (or
           possibly a has), you still can not copy the tied variable without it
           being  untied,  instead you must pass a reference to the tied scalar
           between subroutines.

KEYWORDS
       listbox, widget, tied

SEE ALSO
       Tk::HList, Tk::TextList.

perl v5.40.1                       2025-04-13                      Listbox(3pm)

Generated by dwww version 1.16 on Sat Oct 3 06:47:55 CEST 2026.