Provided by: perl-tk_804.036+dfsg1-1ubuntu3_amd64 bug

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.38.2                                       2024-04-01                                       Listbox(3pm)