dwww Home | Manual pages | Find package

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

NAME
       Tk::focus - Manage the input focus

SYNOPSIS
          $widget->focus

          $widget->focusOption

          $widget->focusNext

          $widget->focusPrev

          $widget->focusFollowsMouse

DESCRIPTION
       The focus methods are used to manage the Tk input focus.  At any given
       time, one window on each display is designated as the focus window;  any
       key press or key release events for the display are sent to that window.
       It is normally up to the window manager to redirect the focus among the
       top-level windows of a display.  For example, some window managers
       automatically set the input focus to a top-level window whenever the
       mouse enters it;  others redirect the input focus only when the user
       clicks on a window.  Usually the window manager will set the focus only
       to top-level windows, leaving it up to the application to redirect the
       focus among the children of the top-level.

       Tk remembers one focus window for each top-level (the most recent
       descendant of that top-level to receive the focus);  when the window
       manager gives the focus to a top-level, Tk automatically redirects it to
       the remembered window.  Within a top-level Tk uses an explicit focus
       model by default.  Moving the mouse within a top-level does not normally
       change the focus;  the focus changes only when a widget decides
       explicitly to claim the focus (e.g., because of a button click), or when
       the user types a key such as Tab that moves the focus.

       The method focusFollowsMouse may be invoked to create an implicit focus
       model:  it reconfigures Tk so that the focus is set to a window whenever
       the mouse enters it.  The methods focusNext and focusPrev implement a
       focus order among the windows of a top-level;  they are used in the
       default bindings for Tab and Shift-Tab, among other things.

       The focus methods can take any of the following forms:

       $widget->focusCurrent
           Returns  the focus window on the display containing the $widget,  or
           an empty string if no window in this application has  the  focus  on
           that display.

       $widget->focus
           If  the  application  currently  has  the  input  focus on $widget's
           display, this command resets the input focus for  $widget's  display
           to  $widget and returns an empty string.  If the application doesn't
           currently have the  input focus on $widget's display,  $widget  will
           be  remembered  as  the  focus for its top-level;  the next time the
           focus arrives at the top-level, Tk will redirect it to $widget.

       $widget->focusForce
           Sets the  focus  of  $widget's  display  to  $widget,  even  if  the
           application  doesn't currently have the input focus for the display.
           This command should be used sparingly, if at all.  In normal  usage,
           an  application  should not claim the focus for itself;  instead, it
           should wait for the window manager to give it the focus.

       $widget->focusLastfor
           Returns the name of the most recent window to have the  input  focus
           among  all  the  windows  in  the  same top-level as $widget.  If no
           window in that top-level has ever had the input  focus,  or  if  the
           most  recent  focus  window  has been deleted, then the top-level is
           returned.  The return value is the  window  that  will  receive  the
           input  focus the next time the window manager gives the focus to the
           top-level.

       $widget->focusNext
       $widget->focusPrev
           focusNext is a utility method used for keyboard traversal,  but  can
           be  useful  in  other  contexts.   It sets the focus to the ``next''
           window after $widget in focus order.  The focus order is  determined
           by  the  stacking  order  of windows and the structure of the window
           hierarchy.  Among siblings, the focus  order  is  the  same  as  the
           stacking order, with the lowest window being first.  If a window has
           children,  the  window  is  visited  first, followed by its children
           (recursively), followed by  its  next  sibling.   Top-level  windows
           other  than  $widget  are skipped, so that focusNext never returns a
           window in a different top-level from $widget.

           After computing the next window,  focusNext  examines  the  window's
           -takefocus  option  to  see  whether  it  should be skipped.  If so,
           focusNext continues on to the next window in the focus order,  until
           it  eventually  finds a window that will accept the focus or returns
           back to $widget.

           focusPrev is similar to focusNext except that it sets the  focus  to
           the window just before $widget in the focus order.

       $widget->focusFollowsMouse
           focusFollowsMouse  changes the focus model for the application to an
           implicit one where the window under the mouse gets the focus.  After
           this procedure is called, whenever the mouse enters a window Tk will
           automatically give it the input focus.  The  focus  command  may  be
           used  to  move  the  focus  to a window other than the one under the
           mouse, but as soon as the mouse moves into a new  window  the  focus
           will  jump  to  that  window.  Note: at present there is no built-in
           support for returning the application to an  explicit  focus  model;
           to  do  this you'll have to write a script that deletes the bindings
           created by focusFollowsMouse.

QUIRKS
       When an internal window receives the input focus,  Tk  doesn't  actually
       set  the  X  focus  to that window;  as far as X is concerned, the focus
       will stay on the top-level window containing the window with the  focus.
       However, Tk generates FocusIn and FocusOut events just as if the X focus
       were  on  the  internal  window.   This approach gets around a number of
       problems that would occur if the X focus were actually moved;  the  fact
       that  the X focus is on the top-level is invisible unless you use C code
       to query the X server directly.

CAVEATS
       Note that for the Canvas widget, the call  to  focus  has  to  be  fully
       qualified.  This  is  because  there  is  already a focus method for the
       Canvas widget, which sets the focus on individual canvas tags.

           $canvas->Tk::focus

KEYWORDS
       events, focus, keyboard, top-level, window manager

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

Generated by dwww version 1.16 on Sat Oct 3 07:36:19 CEST 2026.