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

Bei mehreren Widgets gleiche Option definieren



<< >> 5 Einträge, 1 Seite
Discipulus
 2004-01-23 12:17
#46770 #46770
User since
2003-11-25
19 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen
In meinem Script habe ich mehrere HList's, welche alle die gleichen Optionen erhalten sollen.
Bisher habe ich das so gemacht, dass ich jede Option bei jeder HList einzeln definiert habe, doch mittlerweile nrvt mich das.
Kann ich irgendwie allen HList's die gleichen Optionen geben?

Bisher:
$list1->header('create', 0, -text => "Header");
$list1->columnWidth(0, 50);
$list1->header('create', 1, -text => "Header2");
$list1->columnWidth(1, 80);
$list1->header('create', 2, -text => "Header3");
$list1->columnWidth(2, 80);
$list2->header('create', 0, -text => "Header1");
$list2->columnWidth(0, 50);
$list2->header('create', 1, -text => "Header2");
$list2->columnWidth(1, 80);
$list2->header('create', 2, -text => "Header3");
$list2->columnWidth(2, 80);
Strat
 2004-01-23 12:30
#46771 #46771
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
vielleicht mit einer for-schleife und nicht $list1 und $list2 verwenden, sondern $lists[0] und $lists[1] ?

Code: (dl )
1
2
3
4
5
6
7
8
9
10
my @lists = ();

for (0..1) {
 $lists[$_]->header('create', 0, -text => "Header");
 $lists[$_]->columnWidth(0, 50);
 $lists[$_]->header('create', 1, -text => "Header2");
 $lists[$_]->columnWidth(1, 80);
 $lists[$_]->header('create', 2, -text => "Header3");
 $lists[$_]->columnWidth(2, 80);
}


oder du packst den code in eine subroutine, und returnst die liste, und rufst diese sub 2x auf und weist das ergebnis einmal $list1 und einmal $list2 zu...\n\n

<!--EDIT|Strat|1074854051-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
ptk
 2004-01-23 13:27
#46772 #46772
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Wenn es sich um "echte" Optionen handelt, also Optionen, die per ->configure oder beim Anlegen des Widgets gesetzt werden koennen, dann kann man mit der Option-DB arbeiten (siehe Tk::option). Aber bei deinem Beispiel werden Methoden angewendet, so dass das Beste eine Sub ist, wie Strat schon schrieb.
Discipulus
 2004-01-23 14:15
#46773 #46773
User since
2003-11-25
19 Artikel
BenutzerIn
[default_avatar]
Eigentlich logisch ... ABER:
Es ist ja keine liste die editiert wird, sondern HList's, welchen ich nur den Name $list1 und $list2 gegeben habe.
Was ich möchte ist, dass ich die Methoden nur einmal, z.b. in einer Sub, definiere, und dann alle Widgets da durch lasse.
Also sozusagen, dass $list1 und $list2 einer Variable zugewiesen werden und die Methoden dann auf diese Variable angewandt werden, also dass das Widget variabel ist.
Kann ich da vielleicht einen Pointer darauf setzen den ich auf die unterschiedlichen Weidgets setze oder so etwas?\n\n

<!--EDIT|Discipulus|1074861505-->
ptk
 2004-01-23 16:16
#46774 #46774
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
$list1 und $list2 sind schon Pointer. Oder genauer: Referenzen. Folgendes sollte gehen:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
$list1 = $mw->HList->pack;
$list2 = $mw->HList->pack;
for my $hl ($list1, $list2) {
konfiguriere_hlist($hl);
}

sub konfiguriere_hlist {
my($hl) = @_;
$hl->header(...);
...
}
<< >> 5 Einträge, 1 Seite



View all threads created 2004-01-23 12:17.