busy



busy

NAME
SYNOPSIS
DESCRIPTION
INTRODUCTION
OPERATIONS
EVENT HANDLING
PORTABILITY
SEE ALSO
KEYWORDS

___________________________

NAME

busy − confine pointer and keyboard events to a window sub-tree

SYNOPSIS

tk busy window ?options?

tk busy hold window ?options?

tk busy configure window ?option value?...

tk busy forget window ?window ?...

tk busy current ?pattern?

tk busy status window ___________________________

DESCRIPTION

The tk busy command provides a simple means to block keyboard, button, and pointer events from Tk widgets, while overriding the widget’s cursor with a configurable busy cursor.

INTRODUCTION

There are many times in applications where you want to temporarily restrict what actions the user can take. For example, an application could have a “Run” button that when pressed causes some processing to occur. However, while the application is busy processing, you probably don’t want the user to be able to click the “Run” button again. You may also want restrict the user from other tasks such as clicking a “Print” button.

The tk busy command lets you make Tk widgets busy. This means that user interactions such as button clicks, moving the mouse, typing at the keyboard, etc. are ignored by the widget. You can set a special cursor (like a watch) that overrides the widget’s normal cursor, providing feedback that the application (widget) is temporarily busy.

When a widget is made busy, the widget and all of its descendants will ignore events. It’s easy to make an entire panel of widgets busy. You can simply make the toplevel widget (such as “.”) busy. This is easier and far much more efficient than recursively traversing the widget hierarchy, disabling each widget and re-configuring its cursor.

Often, the tk busy command can be used instead of Tk’s grab command. Unlike grab which restricts all user interactions to one widget, with the tk busy command you can have more than one widget active (for example, a “Cancel” dialog and a “Help” button).

EXAMPLE
You can make several widgets busy by simply making its ancestor widget busy using the hold operation.

frame .top
button .top.button; canvas .top.canvas
pack .top.button .top.canvas
pack .top
# . . .
tk busy
hold .top
update

All the widgets within .top (including .top) are now busy. Using update insures that tk busy command will take effect before any other user events can occur.

When the application is no longer busy processing, you can allow user interactions again and free any resources it allocated by the forget operation.

tk busy forget .top

The busy window has a configurable cursor. You can change the busy cursor using the configure operation.

tk busy configure .top −cursor "watch"

Destroying the widget will also clean up any resources allocated by the tk busy command.

OPERATIONS

The following operations are available for the tk busy command:
tk busy
window ?option value?...

Shortcut for tk busy hold command.

tk busy hold window ?option value?...

Makes the specified window (and its descendants in the Tk window hierarchy) appear busy. Window must be a valid path name of a Tk widget. A transparent window is put in front of the specified window. This transparent window is mapped the next time idle tasks are processed, and the specified window and its descendants will be blocked from user interactions. Normally update should be called immediately afterward to insure that the hold operation is in effect before the application starts its processing. The following configuration options are valid:
−cursor
cursorName

Specifies the cursor to be displayed when the widget is made busy. CursorName can be in any form accepted by Tk_GetCursor. The default cursor is wait on Windows and watch on other platforms.

tk busy cget window option

Queries the tk busy command configuration options for window. Window must be the path name of a widget previously made busy by the hold operation. The command returns the present value of the specified option. Option may have any of the values accepted by the hold operation.

tk busy configure window ?option value?...

Queries or modifies the tk busy command configuration options for window. Window must be the path name of a widget previously made busy by the hold operation. If no options are specified, a list describing all of the available options for window (see Tk_ConfigureInfo for information on the format of this list) is returned. 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 the empty string. Option may have any of the values accepted by the hold operation.

Please note that the option database is referenced through window. For example, if the widget .frame is to be made busy, the busy cursor can be specified for it by either option command:

option add *frame.busyCursor gumby
option add *Frame.BusyCursor gumby

tk busy forget window ?window?...

Releases resources allocated by the tk busy command for window, including the transparent window. User events will again be received by window. Resources are also released when window is destroyed. Window must be the name of a widget specified in the hold operation, otherwise an error is reported.

tk busy current ?pattern?

Returns the pathnames of all widgets that are currently busy. If a pattern is given, only the path names of busy widgets matching pattern are returned.

tk busy status window

Returns the status of a widget window. If window presently can not receive user interactions, 1 is returned, otherwise 0.

EVENT HANDLING

BINDINGS
The event blocking feature is implemented by creating and mapping a transparent window that completely covers the widget. When the busy window is mapped, it invisibly shields the widget and its hierarchy from all events that may be sent. Like Tk widgets, busy windows have widget names in the Tk window hierarchy. This means that you can use the bind command, to handle events in the busy window.

tk busy hold .frame.canvas
bind .frame.canvas_Busy <Enter> { ... }

Normally the busy window is a sibling of the widget. The name of the busy window is “widget_Busy” where widget is the name of the widget to be made busy. In the previous example, the pathname of the busy window is “.frame.canvas_Busy”. The exception is when the widget is a toplevel widget (such as “.”) where the busy window can’t be made a sibling. The busy window is then a child of the widget named “widget._Busy” where widget is the name of the toplevel widget. In the following example, the pathname of the busy window is “._Busy”.

tk busy hold .
bind ._Busy <Enter> { ... }

ENTER/LEAVE EVENTS
Mapping and unmapping busy windows generates Enter/Leave events for all widgets they cover. Please note this if you are tracking Enter/Leave events in widgets.

KEYBOARD EVENTS
When a widget is made busy, the widget is prevented from gaining the keyboard focus by the busy window. But if the widget already had focus, it still may received keyboard events. To prevent this, you must move focus to another window.

tk busy hold .frame
label .dummy
focus .dummy
update

The above example moves the focus from .frame immediately after invoking the hold so that no keyboard events will be sent to .frame or any of its descendants.

PORTABILITY

Note that the tk busy command does not currently have any effect on OSX when Tk is built using Aqua support.

SEE ALSO

grab(n)

KEYWORDS

busy, keyboard events, pointer events, window







Opportunity


Personal Opportunity - Free software gives you access to billions of dollars of software at no cost. Use this software for your business, personal use or to develop a profitable skill. Access to source code provides access to a level of capabilities/information that companies protect though copyrights. Open source is a core component of the Internet and it is available to you. Leverage the billions of dollars in resources and capabilities to build a career, establish a business or change the world. The potential is endless for those who understand the opportunity.

Business Opportunity - Goldman Sachs, IBM and countless large corporations are leveraging open source to reduce costs, develop products and increase their bottom lines. Learn what these companies know about open source and how open source can give you the advantage.





Free Software


Free Software provides computer programs and capabilities at no cost but more importantly, it provides the freedom to run, edit, contribute to, and share the software. The importance of free software is a matter of access, not price. Software at no cost is a benefit but ownership rights to the software and source code is far more significant.


Free Office Software - The Libre Office suite provides top desktop productivity tools for free. This includes, a word processor, spreadsheet, presentation engine, drawing and flowcharting, database and math applications. Libre Office is available for Linux or Windows.





Free Books


The Free Books Library is a collection of thousands of the most popular public domain books in an online readable format. The collection includes great classical literature and more recent works where the U.S. copyright has expired. These books are yours to read and use without restrictions.


Source Code - Want to change a program or know how it works? Open Source provides the source code for its programs so that anyone can use, modify or learn how to write those programs themselves. Visit the GNU source code repositories to download the source.





Education


Study at Harvard, Stanford or MIT - Open edX provides free online courses from Harvard, MIT, Columbia, UC Berkeley and other top Universities. Hundreds of courses for almost all major subjects and course levels. Open edx also offers some paid courses and selected certifications.


Linux Manual Pages - A man or manual page is a form of software documentation found on Linux/Unix operating systems. Topics covered include computer programs (including library and system calls), formal standards and conventions, and even abstract concepts.