[cologne-pm] 2. versuch: inhalt radiobutton dynamisch anpassen
CemS
mutombo_ at gmx.net
Fr Mär 6 02:59:11 PST 2009
Hallo Susan,
Danke fuer Dein Antwort. Hier die Loesung:
Man muss Button Load mit destroy zestoeren und
immer wieder neu aufbauen. Sicherlich kann man es eleganter
machen aber so funktioniert es.
Gruss
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 {
}
On 3/6/09, CemS <mutombo_ at gmx.net> wrote:
> 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