[cologne-pm] 2. versuch: inhalt radiobutton dynamisch anpassen

CemS mutombo_ at gmx.net
Do Mär 5 23:27:07 PST 2009


Hallo,

leider hat keiner auf meine Frage reagiert daher
versuche ich es mal mit einem reduzierten code:

Was ich moechte:
1. Programm Starten (siehe code am Ende)
2. Program-> "AA selektieren"
3. Crash Mode -> "12 selektieren"
4. Jetzt soll Radiobutton Load nur die Elemente AA_121 und AA_122 beinhalten.


Problem:
Der Button (Inhalt von Load) wird beim programstart generiert und
nicht laufend angepasst.

Habe die Frage schon in perlmonks gestellt aber auch keine Loesung bekommen.
Wenn ich hier falsch sein sollte, wo kann ich meine Frage stellen?
Oder kann mir einer Stichwoerter geben, wonach ich bei google suchen kann?


Gruss und Danke
Cem Sakaryali


Code:


#!/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 $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 $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);

$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');



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")
}
foreach my $i (@LoadArrayRef) {
    $w6->radiobutton (-label => "$i",
                      -command => \&set_bg,
                      -variable => \$Load,
                      -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",)
                      ->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 ();
}

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 {
}


Mehr Informationen über die Mailingliste cologne-pm