focus(3pm) | User Contributed Perl Documentation | focus(3pm) |
Tk::focus - Manage the input focus
$widget->focus
$widget->focusOption
$widget->focusNext
$widget->focusPrev
$widget->focusFollowsMouse
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:
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.
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.
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
events, focus, keyboard, top-level, window manager
2023-03-23 | perl v5.36.0 |