<meta name=
"description" content=
"Pmw - a toolkit for building high-level compound widgets in Python">
<meta name=
"content" content=
"python, megawidget, mega widget, compound widget, gui, tkinter">
<title>Pmw.ButtonBox reference manual
</title>
<body bgcolor=
"#ffffff" text=
"#000000" link=
"#0000ee"
vlink=
"551a8b" alink=
"ff0000">
<h1 ALIGN=
"CENTER">Pmw.ButtonBox
</h1>
<center><IMG SRC=ButtonBox.gif
ALT=
"" WIDTH=
297 HEIGHT=
65></center>
<dt> <h3>Name
</h3></dt><dd>
manager megawidget for buttons
<dt> <h3>Inherits
</h3></dt><dd>
<a href=
"MegaWidget.html">Pmw.MegaWidget
</a><br>
<dt> <h3>Description
</h3></dt><dd>
A button box is a container megawidget which manages a number of
buttons. One of these buttons may be specified as the default and
it will be displayed with the platform specific appearance for a
default button. The buttons may be laid out either horizontally
<dt> <h3>Options
</h3></dt><dd>
Options for this megawidget and its base
classes are described below.
<p></p>
<a name=option.labelmargin
></a>
<dl><dt> <strong>labelmargin
Initialisation option. If the
<strong>labelpos
</strong> option is not
<strong>None
</strong>, this specifies the
distance between the
<strong>label
</strong> component and the rest of the
megawidget. The default is
<strong>0</strong>.
</p>
<a name=option.labelpos
></a>
<dl><dt> <strong>labelpos
Initialisation option. Specifies where to place the
<strong>label
</strong> component. If not
<strong>None
</strong>, it should be a concatenation of one or two of the
letters
<strong>'n'
</strong>,
<strong>'s'
</strong>,
<strong>'e'
</strong> and
<strong>'w'
</strong>. The first letter
specifies on which side of the megawidget to place the label.
If a second letter is specified, it indicates where on that
side to place the label. For example, if
<strong>labelpos
</strong> is
<strong>'w'
</strong>,
the label is placed in the center of the left hand side; if
it is
<strong>'wn'
</strong>, the label is placed at the top of the left
hand side; if it is
<strong>'ws'
</strong>, the label is placed at the
bottom of the left hand side.
</p>
<p> If
<strong>None
</strong>, a label component is not created. The default is
<strong>None
</strong>.
</p>
<a name=option.orient
></a>
Initialisation option. Specifies the orientation of the button box. This may be
<strong>'horizontal'
</strong> or
<strong>'vertical'
</strong>. The default is
<strong>'horizontal'
</strong>.
</p>
Initialisation option. Specifies a padding distance to leave between each button in the x
direction and also between the buttons and the outer edge of the
button box. The default is
<strong>3</strong>.
</p>
Initialisation option. Specifies a padding distance to leave between each button in the y
direction and also between the buttons and the outer edge of the
button box. The default is
<strong>3</strong>.
</p>
<dt> <h3>Components
</h3></dt><dd>
Components created by this megawidget and its base
classes are described below.
<p></p>
<a name=component.frame
></a>
If the
<strong>label
</strong> component has been created (that is, the
<strong>labelpos
</strong>
option is not
<strong>None
</strong>), the
<strong>frame
</strong> component is created to act as
the container of the buttons created by the
<code>add()
</code> and
<code>insert()
</code> methods. If there is no
<strong>label
</strong> component, then no
<strong>frame
</strong> component is created and the
<strong>hull
</strong> component acts as the
container. By default, this component is a Tkinter.Frame.
</p>
<a name=component.hull
></a>
This acts as the body for the entire megawidget. Other components
are created as children of the hull to further specialise this
class. By default, this component is a Tkinter.Frame.
</p>
<a name=component.label
></a>
If the
<strong>labelpos
</strong> option is not
<strong>None
</strong>, this component is
created as a text label for the megawidget. See the
<strong>labelpos
</strong> option for details. Note that to set, for example,
the
<strong>text
</strong> option of the label, you need to use the
<strong>label_text
</strong>
component option. By default, this component is a Tkinter.Label.
</p>
<dt> <h3>Dynamic components
</h3></dt><dd>
Button components are created dynamically by the
<code>add()
</code> and
<code>insert()
</code> methods. By default, the buttons are of type
Tkinter.Button and are created with a component group of
<strong>Button
</strong>.
</p>
<dt> <h3>Methods
</h3></dt><dd>
Only methods specific to this megawidget are described below.
For a description of its inherited methods, see the
manual for its base class
<strong><a href=
"MegaWidget.html#methods">Pmw.MegaWidget
</a></strong>.
<dl><dt> <strong>add
</strong>(
<em>componentName
</em>, **
<em>kw
</em>)
</dt><dd>
Add a button to the end of the button box as a component named
<em>componentName
</em>. Any keyword arguments present will be passed to the
constructor when creating the button. If the
<strong>text
</strong> keyword
argument is not given, the
<strong>text
</strong> option of the button defaults to
<em>componentName
</em>. The method returns the component widget.
</p>
<a name=method.alignbuttons
></a>
<dl><dt> <strong>alignbuttons
</strong>(
<em>when
</em> =
<strong>'later'
</strong>)
</dt><dd>
Set the widths of all the buttons to be the same as the width of
the widest button. If
<em>when
</em> is
<strong>'later'
</strong>, this will occur when the
interpreter next becomes idle, otherwise the resizing will occur
<a name=method.button
></a>
<dl><dt> <strong>button
</strong>(
<em>buttonIndex
</em>)
</dt><dd>
Return the button specified by
<em>buttonIndex
</em>, which may have any
of the forms accepted by the
<code>index()
</code> method.
</p>
<a name=method.delete
></a>
<dl><dt> <strong>delete
</strong>(
<em>index
</em>)
</dt><dd>
Delete the button given by
<em>index
</em> from the button box.
<em>index
</em>
may have any of the forms accepted by the
<code>index()
</code> method.
</p>
<a name=method.index
></a>
<dl><dt> <strong>index
</strong>(
<em>index
</em>,
<em>forInsert
</em> =
<strong>0</strong>)
</dt><dd>
Return the numerical index of the button corresponding to
<em>index
</em>.
This may be specified in any of the following forms:
</p>
<dl><dt><em>name
</em></dt><dd>Specifies the button named
<em>name
</em>.
<p></p>
<dt><em>number
</em></dt><dd>Specifies the button numerically, where
<strong>0</strong> corresponds to
the left (or top) button.
<p></p>
<dt><strong>Pmw.END
</strong></dt><dd>Specifies the right (or bottom) button.
<p></p>
<dt><strong>Pmw.DEFAULT
</strong></dt><dd>Specifies the current default button.
<p></p>
<p> If
<em>forInsert
</em> is true,
<strong>Pmw.END
</strong> returns the number of buttons rather
than the index of the last button.
</p>
<a name=method.insert
></a>
<dl><dt> <strong>insert
</strong>(
<em>componentName
</em>,
<em>beforeComponent
</em> =
<strong>0</strong>, **
<em>kw
</em>)
</dt><dd>
Add a button to the button box as a component named
<em>componentName
</em>. The button is added just before the button
specified by
<em>beforeComponent
</em>, which may have any of the forms
accepted by the
<code>index()
</code> method. Any keyword arguments present
will be passed to the constructor when creating the button. If
the
<strong>text
</strong> keyword argument is not given, the
<strong>text
</strong> option of the
button defaults to
<em>componentName
</em>. To add a button to the end of
the button box, use
<code>add()
</code>. The method returns the component
<a name=method.invoke
></a>
<dl><dt> <strong>invoke
</strong>(
<em>index
</em> =
<strong>Pmw.DEFAULT
</strong>,
<em>noFlash
</em> =
<strong>0</strong>)
</dt><dd>
Invoke the callback command associated with the button specified
by
<em>index
</em> and return the value returned by the callback.
Unless
<em>noFlash
</em> is true, flash the button to
indicate to the user that something happened.
<em>index
</em> may have any of the forms accepted by the
<code>index()
</code> method.
</p>
<a name=method.numbuttons
></a>
<dl><dt> <strong>numbuttons
</strong>()
</dt><dd>
Return the number of buttons in the button box.
</p>
<a name=method.setdefault
></a>
<dl><dt> <strong>setdefault
</strong>(
<em>index
</em>)
</dt><dd>
Set the default button to the button given by
<em>index
</em>. This
causes the specified button to be displayed with the platform
specific appearance for a default button. If
<em>index
</em> is
<strong>None
</strong>,
there will be no default button.
<em>index
</em> may have any of the
forms accepted by the
<code>index()
</code> method.
</p>
<dt> <h3>Example
</h3></dt><dd>
The image at the top of this manual is a snapshot
of the window (or part of the window) produced
by the following code.
<p></p>
def __init__(self, parent):
# Create and pack the ButtonBox.
self.buttonBox = Pmw.ButtonBox(parent,
label_text = 'ButtonBox:',
self.buttonBox.pack(fill = 'both', expand =
1, padx =
10, pady =
10)
# Add some buttons to the ButtonBox.
self.buttonBox.add('OK', command = self.ok)
self.buttonBox.add('Apply', command = self.apply)
self.buttonBox.add('Cancel', command = self.cancel)
# Set the default button (the one executed when
<Return
> is hit).
self.buttonBox.setdefault('OK')
parent.bind('
<Return
>', self._processReturnKey)
# Make all the buttons the same width.
self.buttonBox.alignbuttons()
def _processReturnKey(self, event):
print 'You clicked on OK'
print 'You clicked on Apply'
print 'You clicked on Cancel'
<center><P ALIGN=
"CENTER">
<IMG SRC = blue_line.gif ALT =
"" WIDTH=
320 HEIGHT=
5>
<center><P ALIGN=
"CENTER">
-
<a href=
"index.html">Home
</a>
<br>Manual page last reviewed:
24 May
1998