O'Reilly logo

Mastering Perl/Tk by Nancy Walsh, Stephen Lidie

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Focus Methods

When your application is running, you can force a widget to have the keyboard focus by calling focus on that widget:

$widget->focus;

You might want to do this if you have an Entry widget into which the user should start typing first. Calling focus right before MainLoop causes the widget to get the focus right away. If you press the Tab key, the focus automatically changes from one widget to the next. Shift-Tab can be used to change the focus to the previous widget. Control-Tab can be used in the Text widget. When in doubt, remember that you can tell when a widget has the focus by the highlight rectangle around it.

There are several methods that allow you to manipulate the focus.

To make the focus follow the mouse around, use focusFollowsMouse:

$widget->focusFollowsMouse;

To find out which widget has the focus, call focusCurrent :

$who = $widget->focusCurrent;

To force a widget to have the focus even if the application isn’t currently active, call focusForce:

$widget->focusForce;

This is not a nice thing to do, so try to not use it.

To find out which widget had the focus last, call focusLast:

$which = $widget->focusLast;

If none of the widgets in the window has the focus, the Toplevel is returned.

You can use the focusNext and focusPrev methods to actually move the focus to the next or previous widget in focus order:

$nextwidget = $widget->focusNext;
$prevwidget = $widget->focusPrev;

So, what is focus order? First, focus order is constrained to $widget’s Toplevel ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required