#!/usr/bin/perl -w use strict; use Tk; use Tk::LabFrame; use Tk::Pane; my $self = {}; $self->{'mw'} = tkinit(); my $fr_lframe = $self->{'mw'}->LabFrame(-label => 'Friends') ->pack(-side => 'bottom', -fill => 'x'); # gridRow- bzw. Columnconfigure müssen auf den Frame angewandt werden, nicht auf # das Scrolled, deshalb empfehle ich dir schon hier den Frame zu speichern: $self->{'wgt'}->{'fr_frame'} = $fr_lframe->Scrolled( Frame => -scrollbars => 'oe', -background => 'red', -sticky => 'nsew', )->pack( -side => 'top', -fill => 'both', -expand => 1, )->Subwidget('scrolled'); #!!! update_friends($self, 'list#test_user#freddy#erik#klaus#dieter#peter'); MainLoop; sub update_friends { my $self = shift; my $msg = shift; if ($msg =~ /^list#(.*)/) { my @friend_list = sort split /#/, $1; # ich glaube, damit scrollbars überhaupt erscheinen, muss geometry # propagation aktiviert sein: # $self->{'wgt'}->{'fr_frame'}->gridPropagate(0); my ($row, $col) = (0, 0); for my $friend (@friend_list) { print "R: $row | C: $col\n"; # würden alle spalten gleich viel platz bekommen, hättest du freiraum # zwischen den labels: (falls dies gewünscht ist => # entfernen) #$self->{'wgt'}->{'fr_frame'}->gridRowconfigure($row, -weight => 1); $self->{'wgt'}->{'fr_frame'}->Label( -text => "- $friend", -font => 'Arial 7.5', -foreground => 'blue', -justify => 'left', )->grid( -row => $row, -column => $col++, -sticky => 'ew', ); if ($col > 1) { $col = 0; $row++; } } # damit alles nach oben geschoben wird bekommt die zeile unter den labels # -weight => 1: (es sei denn, die labels sollen in der höhe gleich viel # platz bekommen, dann die nächste zeile auskommentieren) $self->{'wgt'}->{'fr_frame'}->gridRowconfigure( $row+1, -weight => 1 ); $self->{'wgt'}->{'fr_frame'}->gridColumnconfigure(0, -weight => 1); $self->{'wgt'}->{'fr_frame'}->gridColumnconfigure(1, -weight => 1); } }