Groups of Radiobuttons are designed to all
use the same -variable
option but with unique
-value
options for each individual Radiobutton.
When you select a Radiobutton, any other Radiobuttons assigned the
same -variable
will be unselected, and that
variable will be assigned the -value
associated
with the selected Button.
You must always use -value
when creating
Radiobuttons. If you don’t, they won’t select/deselect
correctly. There are no defaults for -value
.
Here is an example that uses Radiobuttons to control the background color:
# setup the default value we would like $rb_value = "red"; $mw->configure(-background => $rb_value); # create the Radiobuttons that will let us change it foreach (qw(red yellow green blue grey)) { $mw->Radiobutton(-text => $_, -value => $_, -variable => \$rb_value, -command => \&set_bg)->pack(-side => 'left'); } # function to change the background color using $rb_value sub set_bg { print "Background value is now: $rb_value\n"; $mw->configure(-background => $rb_value); }
We are storing the status of our Radiobutton group in
$rb_value
. We set it to an initial value of
"red"
, which happens to match the first
Radiobutton we are creating. When any of the Radiobuttons are
clicked, including the one currently selected, the subroutine
set_bg
will be called. This subroutine will print
the new value of $rb_value
and then change the
background of our MainWindow to that color.
If you look at the code closely, you see that we call the
configure
command and send it
$rb_value
. Even though the default value of our
Radiobutton group is "red"
, that doesn’t
mean that the background of the window has been set to red as well.
We could also have set the background color using an explicit call to
the set_bg
routine, or back when we created the
MainWindow.
The window we have created looks like Figure 4-12.
You might notice that for this example, rather than just setting a
variable and waiting for the user to do something with it, we needed
the Radiobutton to take action immediately when pressed. To do this,
we used the -command
option. Let’s talk more
about the -command
option and callbacks in
general.
Get Mastering Perl/Tk now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.