Thread LabFrame & Widgetanordnung (pTk) (6 answers)
Opened by styx-cc at 2009-12-25 20:18

MatthiasW
 2009-12-26 15:05
#129717 #129717
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
Im Moment wendest du gridRow-/Columnconfigure auf das Scrolled an. Du möchtest es aber eigentlich auf den Frame, der die Scrollbalken bekommen soll, anwenden. Hier mal eine überarbeitete Version:
Code (perl): (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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/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);
  }
}

MfG
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'

View full thread LabFrame & Widgetanordnung (pTk)