Hi,
in order to close the loop here is the solution.
You need to destroy and rebuilt the button.
Cheers
Cem
#!/usr/bin/perl -w
use strict;
use Tk;
my @VehicleProgram=('AA','BB');
my @CrashMode=('12','13');
my @Load=('AA_121','AA_13','BB_12','CC_12','AA_122');
my @LoadArrayRef=@Load;
my $sw4;
my $sw1;
my $menub2;
my $Program = 'undef';
my $CrashMode = 'undef';
my $Drive = 'undef';
my $Side = 'undef';
my $dummy = 'undef';
my $Load = 'undef';
my $Error ='no';
my $mw = MainWindow->new;
#my $toplevel = $mw->toplevel;
my $MFrame1 = $mw->Frame()->pack(-side=>'top');
my $MFrame2 = $mw->Frame()->pack(-side=>'bottom');
my $Frame1 = $MFrame1->Frame()->pack(-side=>'left');
my $Frame2 = $MFrame1->Frame()->pack(-side=>'left');
my $Frame3 = $MFrame1->Button(-text => 'Exit',
-borderwidth=>'0',
-command => sub{exit})->pack(-side=>'right');
my $Frame4 = $MFrame2->Frame()->pack(-side=>'bottom',
-fill => 'both',
-expand=> '1');
my $menubar = $Frame1->Menu(-type => 'menubar',
-relief=>'groove',
-borderwidth=>'0')->pack;
my $w1 = $menubar->cascade(-label => 'Program',-tearoff => 0);
my $w2 = $menubar->cascade(-label => 'Crash Mode',-tearoff => 0);
$sw1 = $Frame2->Frame()->pack();
my $menub = $sw1 ->Menubutton(-text => "Load",
-relief=>'groove',
-borderwidth=>'0')->pack();
foreach my $i (@VehicleProgram) {
$w1->radiobutton (-label => "$i",
-command => \&set_bg,
-variable => \$Program,
-value => "$i")
}
foreach my $i (@CrashMode) {
$w2->radiobutton (-label => "$i",
-command => \&set_bg,
-variable => \$CrashMode,
-value => "$i")
}
MainLoop;
sub set_bg {
$sw1->destroy if Exists($sw1);
$sw4->destroy if Exists($sw4);
$sw4 = $Frame4->Frame(-relief => 'ridge', -bd => 2,-height=>'40')-
+>pack();
$sw4->Label(-text => "$Program",)
->pack(-side => 'left',-anchor => 'w');
$sw4->Label(-text => "$CrashMode",
)->pack(-side => 'left',-anchor => 'w');
$sw4->Label(-text => "$Drive",)
->pack(-side => 'left',-anchor => 'w');
$sw4->Label(-text => "$Side",)
->pack(-side => 'left',-anchor => 'w');
$sw4->Label(-text => "$dummy",)
->pack(-side => 'left',-anchor => 'w');
$sw4->Label(-text => "$Load",)
->pack(-side => 'left',-anchor => 'w');
@LoadArrayRef=@Load;
UpdateLoadArray ();
$sw1 = $Frame2->Frame()->pack();
my $menub = $sw1->Menubutton(-text => "Load")->pack();
foreach my $i (@LoadArrayRef) {
$menub->radiobutton(
-label => "$i",
-command => \&set_bg,
-variable => \$Load,
-value => "$i"
);
}
}
sub UpdateLoadArray {
my (@new);
foreach (@LoadArrayRef) {
if ($_ !~ /$Program/) {next}
if ($_ !~ /$CrashMode/) {next}
# print "$_\n";
push (@new,$_);
}
@LoadArrayRef=@new;
# print "-----\n";
# print "Program:$Program CrashMode:$CrashMode\n";
# foreach (@LoadArrayRef) {print "$_\n"}
# print "-----\n";
}
sub CreateRun {
}
|