Unless you show what you've tried, it's impossible to explain where you might be going wrong.
Here's an example direct from the source code of Tk::Button: $w->configure(-state => 'active');
Here's one from the source code of Tk::Menubutton: $w->configure('-state','normal')
As you can see, there's nothing special here.
| [reply] [d/l] [select] |
Thanks for giving replay, here is my code , in that two option menus , one button is there , what i want is , if the first optionmenu selected the second one get activated , if the second one get selected the exit button should get activated till then optionmenu2,exit button are disabled state how i do it please help me..........
#!/usr/bin/perl -w
use Tk;
my $mw = MainWindow->new();
$mw-> geometry("400x100");
$mw -> configure(-background => "cyan",
-foreground => "lightblue"
);
my $opt = "0";
my $opt1 = "0";
my ($var, $tvar);
$opt = $mw->Optionmenu(
-background => "lightgreen",
-options => [[jan=>1], [feb=>2], [mar=>3], [apr=>4]],
-command => sub { print "got: ", shift, "\n" },
-variable => \$var,
-textvariable => \$tvar
)->pack;
$opt->configure(-state);
#$opt->configure(-state=>'disabled');
$opt->addOptions([may=>5],[jun=>6],[jul=>7],[aug=>8]);
my $exit_but = $mw->Button(-text=>'Exit', -command=>sub{$mw->destroy})
+->pack(-side=>"bottom");
$exit_but->configure(-state);
$exit_but->configure(-state => 'disabled');
$opt1 = $mw->Optionmenu(
-background => "lightgreen",
-options => [qw(test1 test2 test3)],
-command => \&do_some,
-variable => \$var,
)->pack;
$opt1->configure(-state);
MainLoop;
sub do_some {
if($opt ) {
$exit_but -> configure(-state => 'disabled');
} else {
$opt->configure(-state=>'disabled');
$opt1->configure(-state=>'active');
}
}
| [reply] [d/l] |
You have to be careful about the optionmenu widgets being in existence, before configuring their commands, when you want to set their state. This does what I think you want. It might also be good to have a Reset button so the button states can be restored, in case the user wants to redo the selections.
#!/usr/bin/perl -w
use strict;
use Tk;
my $mw = MainWindow->new();
$mw-> geometry("400x100");
$mw -> configure(-background => "cyan",
-foreground => "lightblue"
);
my ($var, $var1);
my $opt = $mw->Optionmenu(
-background => "lightgreen",
-options => [[jan=>1], [feb=>2], [mar=>3], [apr=>4]],
-variable => \$var,
)->pack;
$opt->addOptions([may=>5],[jun=>6],[jul=>7],[aug=>8]);
my $exit_but = $mw->Button(-text=>'Exit',
-command=>sub{
print "Var= $var Var1= $var1\n";
$mw->destroy},
-state => 'disabled',
)->pack(-side=>"bottom");
my $opt1 = $mw->Optionmenu(
-background => "lightgreen",
-options => [qw(test1 test2 test3)],
-variable => \$var1,
-state => 'disabled',
)->pack;
# must configure the $opt command AFTER $opt1 gets created
$opt->configure(-command => sub{
print "got: ", shift, "\n";
$opt->configure(-state => 'disabled');
$opt1->configure(-state => 'normal');
});
$opt1->configure( -command => sub{
$opt1->configure(-state => 'disabled');
$exit_but->configure(-state => 'normal');
});
MainLoop;
| [reply] [d/l] |