joptionbutton.tcl
Introduction
The
joptionbutton.tcl library is distributed as part of the
jstools package. It provides a button that pops up an option menu
so your users can make a oneofmany choice. It's equivalent
in functionality to a group of radio buttons, but a little easier
to use and more sparing of screen realestate.
This document describes
joptionbutton.tcl version 4.1/4.2.
Usage
Accessing the Library
In order to use the
joptionbutton.tcl library, it (and any other libraries it depends on) must be
in your Tcl
auto_path, described in
tclvars(n). Information about how to arrange that, and other conventions
common to
the
jstools libraries, is in
the
Usage section
of
The jstools Libraries.
Credits and Copyright
Author
Jay Sekora
js@aq.org
http://shore.net/~js/
Copyright
The library is copyright © 1992-1995 by Jay Sekora, but may be
freely redistributed under the conditions at the top of the file.
Overview
Procedure
j:option - create option button with associated menu
j:option:configure - set attributes of option button
j:option:popup - pop up option button's menu
j:alert
Usage
j:option
w
[options]
Argument
w is the name of the new option button to create
Options
-font
font
(default
{})
-list
list
(default "(none)"; not really optional)
-width
width
(default
20)
-current
current
(default first element of list)
Example
toplevel .prefs
j:option .prefs.colour -list {red yellow blue} \
-current $PREFS(colour)
pack .prefs.colour
bind .prefs.ok {set PREFS(colour) [.prefs.colour get]}
Description
This procedure creates a new option button,
w, with an associated menu, which can be posted by clicking on
the button. An option button is useful for asking the user
to select one option from a constrained set of choices. The
menu will contain all the elements of
list, and the button will be labelled with
current. If
current is not in
list, it will be added to the beginning of
list the first time the menu is brought up. Choosing another
item from the menu will cause the button's text to change to that
item, and cause the item to become the new current value of the
option button. If
font is specified and nonnull, both the button and the menu will
be displayed in that font. The menu will be
width characters wide, and the button will also be
width characters wide unless it is packed in such a way as to change
its dimensions.
The current value of the button can be manipulated with the
get and
set widget commands, and the current values of the widget options
can be changed or retrieved with the
configure widget command.
Widget Commands
w get
This widget command returns the current value of the option button.
w set
value
This widget command sets the current value of the option button.
w configure
option
[argument]
This widget command lets you retrieve (if
argument is omitted) or set (if it is provided) the current value of
any of the options,
font,
list,
width, or
current.
j:option:configure
Usage
j:option:configure
w
option
[argument]
Arguments
w is the pathname of the option button to be configured
option is one of
-font,
-list,
-current, or
-width
argument, if specified, is the new value of
option
Description
This procedure is used internally by
j:option, and should not need to be called directly. It implements
the
configure widget command.
j:option:popup
Usage
j:option:popup
w
button
Arguments
w is the pathname of the frame to hold the popup menu
button is the pathname of the option button
Description
This procedure is used internally by
j:option, and should not need to be called directly. It is invoked
when an option button is clicked on. It creates a new frame
w, packs a listbox in it to simulate a menu, positions it appropriately
over the option button, and sets up mouse bindings letting the
user select an item from the listbox. (The reason for using
a listbox rather than a menu is that the width of a menu can't
be set.)
Bugs and Misfeatures
If an option button is packed such that it's larger or smaller
than its requested width (as specified by the
-width option), its menu will be the wrong size.
Only one option at a time can be specified to
j:option:configure, and hence to the
configure widget command.
Future Directions
* I'm probably going to rewrite this to be more compatible with
the Tk 4.0
tk_optionMenu procedure.