Updated 2012-08-07 01:16:03 by RLE

focus - Manage the input focus
http://purl.org/tcl/home/man/tcl8.5/TkCmd/focus.htm

focus
Returns the path name of the focus window on the display containing the application's main window, or an empty string if no window in this application has the focus on that display. Note: it is better to specify the display explicitly using -displayof (see below) so that the code will work in applications using multiple displays.

focus window
If the application currently has the input focus on window 's display, this command resets the input focus for window 's display to window and returns an empty string. If the application doesn't currently have the input focus on window 's display, window 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 window. If window is an empty string then the command does nothing.

focus -displayof window
Returns the name of the focus window on the display containing window. If the focus window for window 's display isn't in this application, the return value is an empty string.

focus -force window
Sets the focus of window's display to window, 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. If window is an empty string then the command does nothing.

focus -lastfor window
Returns the name of the most recent window to have the input focus among all the windows in the same top-level as window. 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 name of 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.

When is it important to use focus?

To change the order in which focus moves between widgets upon the pressing of 'Tab', either:

  • change the order in which the widgets are created (N.B. packing order does not matter!)
  • use the raise and lower commands to change stacking order

RS 2006-05-24: focus -force $toplevel on Windows has the effect of flashing the app's button in the task bar.

MG has found this behaviour to be very erratic. Usually focus (and focus -force) transfer the focus, but occasionally they'll only flash the taskbar button for the app. (wm deiconify does the reverse, usually flashing the taskbar but sometimes giving the app focus instead.) An external lib for flashing the taskbar is far more reliable, from my experience.

[MF] Focus changes are limited in Windows. Usually [stealing focus] from other processes is not possible, in such a case the window just flashes (title bar or task bar if not visible). See Remarks section of [SetForegroundWindow] in msdn [1]

LV What are some techniques when a developer wants to open a Tk window, but does NOT want the desktop mouse focus to move to that window? Right now, the Tk window always pops in front and takes the keyboard focus away from the primary application, which is not helpful in this particular case.


See also edit