in reply to PerlTK: update radiobutton content on code execution

First, use strict. Also I can't tell what you want to do. I've added some debugging statements, that show whats happening, and I added textvariable to $Load so it updates automatically. Beyond that I don't know what you are doing.
#!/usr/bin/perl use warnings; use strict; use Tk; my @VehicleProgram = ( 'AA', 'BB' ); my @CrashMode = ( '12', '13' ); my @Drive = ( 'lhd', 'rhd' ); my @Side = ( 'Driver', 'Passanger' ); my @Dummy = ( '50', '95', '5' ); my @Load = ( 'AA_121', 'AA_13', 'BB_12', 'CC_12', 'AA_122' ) +; my @LoadArrayRef = @Load; my $Program = 'undef'; my $CrashMode = 'undef'; my $Drive = 'undef'; my $Side = 'undef'; my $dummy = 'undef'; my $Load = 'undef'; my $Error = 'no'; my $font2 = '-adobe-courier-medium-r-normal--16-100-100-100-m-90-iso88 +59-2'; my $sw4; my $comment; my $mw = MainWindow->new; my $toplevel = $mw->toplevel; my $menubar = $toplevel->Menu( -type => 'menubar' )->pack; my $w1 = $menubar->cascade( -label => 'Program', -tearoff => 0 ); my $w2 = $menubar->cascade( -label => 'Crash Mode', -tearoff => 0 ); my $w3 = $menubar->cascade( -label => 'Drive', -tearoff => 0 ); my $w4 = $menubar->cascade( -label => 'Side', -tearoff => 0 ); my $w5 = $menubar->cascade( -label => 'Dummy', -tearoff => 0 ); my $w6 = $menubar->cascade( -label => 'Load', -tearoff => 0 ); my $w11 = $menubar->Button( -label => 'CreateRun', -command => \&CreateRun, -state => 'disabled' ); $menubar->Button( -label => 'Exit', -command => sub { exit } ); my $sw3 = $mw->Frame( -relief => 'ridge', -bd => 2, -height => '40' )->pack( -side => 'top', -anchor => 'w', -expand => 0, -fill => 'both' ); my $cm1 = $sw3->Label( -text => " Comment: ", -font => "$font2" )->pack( -side => 'left', -anchor => 'w' ); my $cm2 = $sw3->Entry( -textvariable => \$comment, -background => "white", -foreground => "black", -relief => 'ridge', -font => "$font2" )->pack( -side => 'left', -anchor => 'w' ); foreach my $i ( @VehicleProgram ) { $w1->radiobutton( -label => "$i", -command => \&set_bg, -variable => \$Program, -font => "$font2", -value => "$i" ); } foreach my $i ( @CrashMode ) { $w2->radiobutton( -label => "$i", -command => \&set_bg, -variable => \$CrashMode, -font => "$font2", -value => "$i" ); } foreach my $i ( @Drive ) { $w3->radiobutton( -label => "$i", -command => \&set_bg, -variable => \$Drive, -font => "$font2", -value => "$i" ); } foreach my $i ( @Side ) { $w4->radiobutton( -label => "$i", -command => \&set_bg, -variable => \$Side, -font => "$font2", -value => "$i" ); } foreach my $i ( @Dummy ) { $w5->radiobutton( -label => "$i", -command => \&set_bg, -variable => \$dummy, -font => "$font2", -value => "$i" ); } foreach my $i ( @LoadArrayRef ) { $w6->radiobutton( -label => "$i", -command => \&set_bg, -variable => \$Load, -font => "$font2", -value => "$i" ); } MainLoop; sub set_bg { $sw4->destroy if Exists( $sw4 ); $sw4 = $mw->Frame( -relief => 'ridge', -bd => 2, -height => '40' )->pack( -side => 'top', -anchor => 'w', -expand => 0, -fill => 'both' ); $sw4->Label( -text => "$Program", -font => "$font2" )->pack( -side => 'left', -anchor => 'w' ); $sw4->Label( -text => "$CrashMode", -font => "$font2" )->pack( -side => 'left', -anchor => 'w' ); $sw4->Label( -text => "$Drive", -font => "$font2" )->pack( -side => 'left', -anchor => 'w' ); $sw4->Label( -text => "$Side", -font => "$font2" )->pack( -side => 'left', -anchor => 'w' ); $sw4->Label( -text => "$dummy", -font => "$font2" )->pack( -side => 'left', -anchor => 'w' ); $sw4->Label( -textvariable => \$Load, -font => "$font2" )->pack( -side => 'left', -anchor => 'w' ); $w11->configure( -state => 'active' ) if ( $Program ne 'undef' and $CrashMode ne 'undef' and $Drive ne 'undef' and $Side ne 'undef' and $dummy ne 'undef' and $Load ne 'undef' ); @LoadArrayRef = @Load; UpdateLoadArray(); } sub UpdateLoadArray { my ( @new ); print "@LoadArrayRef\n\n"; foreach ( @LoadArrayRef ) { if ( $_ !~ /$Program/ ) { next } if ( $_ !~ /$CrashMode/ ) { next } print "$_\n"; push( @new, $_ ); } @LoadArrayRef = @new; print "-----\n"; print "new-> @new\n"; print "Program:$Program CrashMode:$CrashMode\n"; # update label thru textvariable $Load = join ' ', @new; foreach ( @LoadArrayRef ) { print "$_\n" } print "-----\n"; } sub CreateRun { }

I'm not really a human, but I play one on earth My Petition to the Great Cosmic Conciousness

Replies are listed 'Best First'.
Re^2: PerlTK: update radiobutton content on code execution
by cemmec (Initiate) on Feb 27, 2009 at 17:38 UTC
    Hi zentara, thank you for your help. I will try to explain my problem. start script. Program-> chose AA CrashMode-> chose 12 > Now the Button Load should display only AA_121 and AA_122. Currently all Elements of the Array @Load are displayed. Thanks Cem
    Cleaned code
    #!/usr/bin/perl use warnings; 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 $Program = 'undef'; my $CrashMode = 'undef'; my $Load = 'undef'; my $Error = 'no'; my $font2 = '-adobe-courier-medium-r-normal--16-100-100-100-m-90-iso88 +59-2'; my $sw4; my $comment; my $mw = MainWindow->new; my $toplevel = $mw->toplevel; my $menubar = $toplevel->Menu( -type => 'menubar' )->pack; my $w1 = $menubar->cascade( -label => 'Program', -tearoff => 0 ); my $w2 = $menubar->cascade( -label => 'Crash Mode', -tearoff => 0 ); my $w6 = $menubar->cascade( -label => 'Load', -tearoff => 0 ); my $sw3 = $mw->Frame( -relief => 'ridge', -bd => 2, -height => '40' )->pack( -side => 'top', -anchor => 'w', -expand => 0, -fill => 'both' ); foreach my $i ( @VehicleProgram ) { $w1->radiobutton( -label => "$i", -command => \&set_bg, -variable => \$Program, -font => "$font2", -value => "$i" ); } foreach my $i ( @CrashMode ) { $w2->radiobutton( -label => "$i", -command => \&set_bg, -variable => \$CrashMode, -font => "$font2", -value => "$i" ); } foreach my $i ( @LoadArrayRef ) { $w6->radiobutton( -label => "$i", -command => \&set_bg, -variable => \$Load, -font => "$font2", -value => "$i" ); } MainLoop; sub set_bg { $sw4->destroy if Exists( $sw4 ); $sw4 = $mw->Frame( -relief => 'ridge', -bd => 2, -height => '40' )->pack( -side => 'top', -anchor => 'w', -expand => 0, -fill => 'both' ); $sw4->Label( -text => "$Program", -font => "$font2" )->pack( -side => 'left', -anchor => 'w' ); $sw4->Label( -text => "$CrashMode", -font => "$font2" )->pack( -side => 'left', -anchor => 'w' ); $sw4->Label( -textvariable => \$Load, -font => "$font2" )->pack( -side => 'left', -anchor => 'w' ); @LoadArrayRef = @Load; UpdateLoadArray(); } sub UpdateLoadArray { my ( @new ); print "@LoadArrayRef\n\n"; foreach ( @LoadArrayRef ) { if ( $_ !~ /$Program/ ) { next } if ( $_ !~ /$CrashMode/ ) { next } print "$_\n"; push( @new, $_ ); } @LoadArrayRef = @new; print "-----\n"; print "new-> @new\n"; print "Program:$Program CrashMode:$CrashMode\n"; # update label thru textvariable $Load = join ' ', @new; foreach ( @LoadArrayRef ) { print "$_\n" } print "-----\n"; } sub CreateRun { }
      Well you have a problem with your putting undef in quotes, like = 'undef'. You could switch to total textvariables in the label, and set them to '' instead of undef. That way, they will display as "no width' in the label, unless they have a value.

      I'm not really a human, but I play one on earth My Petition to the Great Cosmic Conciousness
        Hi, but the content of the Load button is always same. it is
        AA_121 AA_13 BB_12 CC_12 AA_122
        This is not changing depending on the Values of $Program and $CrashMode I am not talking about the output on the shell. My problem is the TK window. Thanks Cem