Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]5179[/thread]

[TK]Problem mit Radiobutton

Leser: 2


<< |< 1 2 >| >> 18 Einträge, 2 Seiten
zipster
 2006-05-09 18:16
#45365 #45365
User since
2004-09-06
458 Artikel
BenutzerIn
[default_avatar]
Hi,

ich bin heute auf ein Problem mit Radiobutton gestoßen und weiß nicht wie ichs lösen soll.

Normalerweise werden ja Radiobutton z.B. so aufgebaut
Code: (dl )
1
2
3
4
my $radvar='rot';

$mw->Radiobutton(-text => 'rot', -variable=>$radvar, -value=>'rot', -anchor=>'w')->pack(-fill,'x');
$mw->Radiobutton(-text => 'gelb', -variable=>$radvar, -value=>'gelb', -anchor=>'w')->pack(-fill,'x');


Jetzt zu meinem Problem. Ich bau mein Interface mit Hilfe einer sub auf und die Werte für die Radiobuttons kommen nicht aus einer Variable sondern aus einem Hash.
Deswegen reagiert jeder meiner Radiobuttons als eigenständiger Button und nicht als Gruppe.

Wie könnte ich das Problem lösen? Gibt es vieleicht ne alternative zu Radiobutton(hab keine gefunden)

Hier noch mal ein kleinen Auszug aus meinem Code.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
sub hlist_notebook{
my ( $hash_ref, $hash_ref_ini, $page, $hlist, $befehl, $choices) = @_;
my ( $counter, $choices_for_browse, $choices_befehl, $feld, $feldname);
for $feldname (keys(%{$hash_ref_ini})) {
$counter++;
}
my @choices = lies_tabellen_zeilen($dbh, "adresstyp", "beschreibung");
$hlist = $page->Scrolled("HList",
-header => 1,
-columns => $counter,
-scrollbars => 'oe',
-width => 145,
-height => 20,
-relief => 'flat',
-selectbackground => 'SeaGreen3',
#-background => ''white'',
)
->$befehl();
for my $datensatz_id (sort keys(%{$hash_ref})){
my $e = $hlist->addchild("");
for $feldname (keys(%{$hash_ref_ini})) {
my $browse = $hash_ref_ini->{$feldname}->{'widget'};
$hlist->header('create', $hash_ref_ini->{$feldname}->{'place'}, -itemtype => 'window', -widget => $hlist->Button(-text => $hash_ref_ini->{$feldname}->{'buttonname'}, -relief => 'flat', -command => [ \&MyTk::HList::order, $hash_ref_ini->{$feldname}->{'place'}, 0 ]), -style => $headerstyle);
$hlist->itemCreate($e, $hash_ref_ini->{$feldname}->{'place'}, -itemtype => 'window', (-widget => $feld = $hlist->$browse($hash_ref_ini->{$feldname}->{'variable'} => \$hash_ref->{$datensatz_id}->{$feldname}, -width => $hash_ref_ini->{$feldname}->{'width'})));
if ($browse eq "BrowseEntry"){
$feld->insert('end',$_) for (@choices);
}
}
}
}#hlist_notebook



Gruß
Seri aka Zipster
renee
 2006-05-09 18:19
#45366 #45366
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich habe Dein Problem nicht so ganz verstanden! Willst Du, dass die Buttons als Gruppe reagieren, oder willst Du eine Alternative zu Radiobuttons?
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
zipster
 2006-05-09 18:41
#45367 #45367
User since
2004-09-06
458 Artikel
BenutzerIn
[default_avatar]
Ja ich will das die Radiobuttons als Gruppe reagieren.
Matze
 2006-05-09 18:45
#45368 #45368
User since
2005-08-29
222 Artikel
BenutzerIn
[Homepage] [default_avatar]
Kannst du auch mal den Code posten, den du für den Aufbau deiner
Radiobuttons verwendest ?

Als Gruppe reagieren sie so:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/usr/bin/perl -w
#
use strict;
use Tk;

my $mw = tkinit();

my $radio = {group1 => [qw/1 2 3 4 5 6 7 8 9/],
             group2 => [qw/a b c d e f g h i/]};

foreach my$group (keys %{$radio}) {
  if ($group =~ /1/) {
    for my$i (0..$#{$radio->{$group}}) {
      $mw->Radiobutton(-value => $radio->{$group}->[$i],
                       -variable => \$radio->{var1},
                       -text => $radio->{$group}->[$i])->pack(-anchor,"e",-side,"top");
    }
  }
  else {
    for my$i (0..$#{$radio->{$group}}) {
      $mw->Radiobutton(-value => $radio->{$group}->[$i],
                       -variable => \$radio->{var2},
                       -text => $radio->{$group}->[$i])->pack(-anchor,"n",-side,"right");
    }
  }
}

MainLoop;


Alternativen für den Radiobutton kenne ich nicht.

MfG. Matze
Mit freundlichen Grüßen: Matze
zipster
 2006-05-09 18:49
#45369 #45369
User since
2004-09-06
458 Artikel
BenutzerIn
[default_avatar]
Auch wenn es nicht so aussieht aber den Code oben benutzte ich dafür.

Code: (dl )
1
2
3
...
(-widget => $feld = $hlist->$browse($hash_ref_ini->{$feldname}->{'variable'} => \$hash_ref->{$datensatz_id}->{$feldname}, -width => $hash_ref_ini->{$feldname}->{'width'})
...


Hiermit wird in eine HLIST Felder eingefügt. Je nachdem was in der Ini steht. Z.B. ein BrowseEntry oder ein Checkbutton oder ein....
zipster
 2006-05-10 18:00
#45370 #45370
User since
2004-09-06
458 Artikel
BenutzerIn
[default_avatar]
Will ja nicht nerven oder so... aber hat keiner ne Idee wie ich das lösen kann?

Vo mir aus müßten es auch keine Radiobuttons sein. Ich brauch halt nur die Funktionalität
Matze
 2006-05-10 18:23
#45371 #45371
User since
2005-08-29
222 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich sehe Edit:in deinem Code kein -variable, oder kann man das so mit
HLIST->browse machen ?

Aber vielleicht verstehe ich deinen Code auch einfach nicht, kannst
du ihn noch mal ein bisschen besser formatiert posten ?

MfG. Matze\n\n

<!--EDIT|Matze|1147271014-->
Mit freundlichen Grüßen: Matze
ptk
 2006-05-11 10:29
#45372 #45372
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Checkbutton?
zipster
 2006-05-11 12:04
#45373 #45373
User since
2004-09-06
458 Artikel
BenutzerIn
[default_avatar]
@Matze
Der Befehl -variable steht da drin
Code: (dl )
$hash_ref_ini->{$feldname}->{'variable'}

Den bei BrowseEntry ist er anders als bei Entry. Deswegen mußte ich diesen Weg wählen.

Meinst du so?
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
sub hlist_notebook{
my ( $hash_ref, $hash_ref_ini, $page, $hlist, $befehl, $choices) = @_;
my ( $counter, $choices_for_browse, $choices_befehl, $feld, $feldname);
for $feldname (keys(%{$hash_ref_ini})) {
$counter++;
}
my @choices = lies_tabellen_zeilen($dbh, "adresstyp", "beschreibung");
$hlist = $page->Scrolled("HList",
-header => 1,
-columns => $counter,
-scrollbars => 'oe',
-width => 145,
-height => 20,
-relief => 'flat',
-selectbackground => 'SeaGreen3',
#-background => ''white'',
)
->$befehl();
for my $datensatz_id (sort keys(%{$hash_ref})){
my $e = $hlist->addchild("");
for $feldname (keys(%{$hash_ref_ini})) {
my $browse = $hash_ref_ini->{$feldname}->{'widget'};
$hlist->header('create',
$hash_ref_ini->{$feldname}->{'place'},
-itemtype => 'window',
-widget => $hlist->Button(-text => $hash_ref_ini->{$feldname}->{'buttonname'},
-relief => 'flat',
-command => [ \&MyTk::HList::order, $hash_ref_ini->{$feldname}->{'place'}, 0 ]),
-style => $headerstyle);

$hlist->itemCreate($e,
$hash_ref_ini->{$feldname}->{'place'},
-itemtype => 'window',
(-widget => $feld = $hlist->$browse($hash_ref_ini->{$feldname}->{'variable'} => \$hash_ref->{$datensatz_id}->{$feldname},
-width => $hash_ref_ini->{$feldname}->{'width'})));
if ($browse eq "BrowseEntry"){
$feld->insert('end',$_) for (@choices);
}
}
}
}#hlist_notebook


@Ptk
Könnte ich auch nehmen. Ich müßte es halt nur irgendwie schaffen das immer nur ein Checkbutton ausgewählt werden kann. Und ehrlich gesagt hab ich keine Ahnung wie ich das machen soll.
Matze
 2006-05-11 17:13
#45374 #45374
User since
2005-08-29
222 Artikel
BenutzerIn
[Homepage] [default_avatar]
Genau so meinte ich es!

Ich glaube allerdings, dass ich immer noch nicht verstehe wo denn
steht welches Widget du einfügen möchtest...
Code: (dl )
1
2
3
4
5
               $hlist->itemCreate($e, 
                                 $hash_ref_ini->{$feldname}->{'place'},
                                 -itemtype => 'window',
                                 (-widget => $feld = $hlist->$browse($hash_ref_ini->{$feldname}->{'variable'} => \$hash_ref->{$datensatz_id}->{$feldname},
                                                                      -width => $hash_ref_ini->{$feldname}->{'width'})));

Denn in $feld steht ja nur HLIST->browse(-variable => \$variable);
so ungefähr drin, oder ?

Ansonmsten, Checkbuttons:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/perl -w
#
use strict;
use Tk;

my $mw = tkinit();
my @text = qw(Checkbox1 Checkbox2 Checkbox3 Checkbox4);
my @var;

for my$i (0..$#text) {
  $mw->Checkbutton(-text => $text[$i],
                   -variable => \$var[$i],
                   -command => [\&select,$i])->pack;
}

MainLoop;

#
#----------------------------------------------------------
#

sub select {
  my $i = shift;

  for my$j (0..$#text) {
    if ($var[$j] == 1) { $var[$j] = 0 }
    if ($j == $i)      { $var[$j] = 1 }
  }
}

Aber das ist bei deinem Code warscheinlich etwas komplexer ;)

MfG. Matze

Edit:[SMALL] => [SIZE=1]\n\n

<!--EDIT|Matze|1147353295-->
Mit freundlichen Grüßen: Matze
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2006-05-09 18:16.