ein Kapitel zurück                                           ein Kapitel weiter

Um sich jetzt zum Beispiel die Radiobuttons und die Checkbuttons in dem Fenster zu trennen benötigen wir Frames. Mit Frames teilen wir den Bereich im Fenster in mehrere (unsichtbare) Bereiche auf. Wollen wir uns gleich mal ansehen wie man ein Fenster in mehrere Frames unterteilt.......

 #! /usr/bin/perl -w

use strict;
use Tk;

my $main = MainWindow->new;

my $frame_left=$main->Frame()->pack(-side => 'left');
my $frame_right=$main->Frame()->pack(-side => 'right');

my $check1=$frame_left->Checkbutton(-text => "Kontrollkästchen 1")
                                    ->pack();
my $check2=$frame_left->Checkbutton(-text => "Kontrollkästchen 2")
                                    ->pack();

my $radio1=$frame_right->Radiobutton(-text => "Optionsfeld 1" )
                                     ->pack();
my $radio2=$frame_right->Radiobutton(-text => "Optionsfeld 2")
                                     ->pack();

MainLoop;


So siehts aus :

Frames Tk und Perl

In diesem Beispiel richten wir mittels...........

 my $frame_left=$main->Frame()->pack(-side => 'left');
 my $frame_right=$main->Frame()->pack(-side => 'right');

....eine linken und einen rechten Bereich (Frame) in unserem MainWindow ein. Der Zugriff erfolgt dann auch über den einzelnen Framebereichen und nicht mehr über die Referenz des MainWindows.
Wenn sie jetzt noch eine 3. Frame einfügen wollen um einen Zwischenraum dieser beiden Frames zu schaffen so genügt folgendes....

 my $frame_center=$main->Frame(-width => 100, -height => 100)
                        ->pack(-side => 'left', -anchor => 'center');

...und voiala. Nun sind wir in der Lage mittels Frames mehrer Widget zusammenzufassen. Hier noch ein paar weitere Programme um ein Gefühl für die Frames zu bekommen...........

#!/usr/bin/perl -w

use Tk;
use strict;

my $top = new MainWindow;

my $frame1 = $top->Frame(-width => 200,
                         -height => 50,
                         -bg => 'black');

my $frame2 = $top->Frame(-width => 200,
                         -height => 50,
                         -bg => 'red');

my $frame3 = $top->Frame(-width => 200,
                         -height => 50,
                         -bg => 'yellow');

$frame1->pack(-side => 'top');
$frame2->pack(-side => 'top');
$frame3->pack(-side => 'top');

MainLoop;



So siehts aus :

Frames Tk und Perl

Durch die Anweisung -side = des Geometriemanagers pack wird dafür gesorgt das immer das nächste Frame oben ist. Hier wird die Deutsche Nationalflagge dargestellt. Jetzt wollen wir das ganze um 90 Grad drehen............

#!/usr/bin/perl -w

use Tk;
use strict;

my $top = new MainWindow;

my $frame1 = $top->Frame(-width => 50,
                         -height => 200,
                         -bg => 'black');

my $frame2 = $top->Frame(-width => 50,
                         -height => 200,
                         -bg => 'red');

my $frame3 = $top->Frame(-width => 50,
                         -height => 200,
                         -bg => 'yellow');

$frame1->pack(-side => 'left');
$frame2->pack(-side => 'left');
$frame3->pack(-side => 'left');

MainLoop;



So siehts aus :

Frames Tk und Perl

Nun wir jeder neue Frame immer erst an der linken Seite dargestellt. Nun ist auch nicht schwer mit Hilfe von Schleifen und Frames ein Schachbrett mit 64 Feldern darzustellen...........

#!/usr/bin/perl -w

use Tk;
use strict;

my @colors = qw(black yellow);
my $top = new MainWindow;

foreach my $i (1..8) {
   my $row = $top->Frame->pack(-side => 'top');    #8 Reihen
   foreach my $j (1..8) {
      my $frame = $row->Frame(-width => 25, -height => 25,
         -bg => $colors[($i + $j) % 2]);
         #gerade Zahlen Schwarze Farbe, ungerade gelbe Farbe
      $frame->pack(-side => 'left');
      #In der Reihe n links anfügen
   }
}
MainLoop;



So siehts aus :

Frames Tk und Perl

Zuerst wird immer ein Frame oben erzeugt in dem dann 8 Felder in der Spalte jeweils ein Frame links eingefügt wird. Um Frames in einer bestimmten Art darzustellen gibt es die Option relief.......

#!/usr/bin/perl -w

use strict;
use Tk;

my $mw = MainWindow->new();

my $f1 = $mw->Frame(-relief      => 'ridge',
                    -width       => '100',
                    -height      => '30',
                    -borderwidth => '10')->pack(-side => 'top');

my $text = $f1->Label(-text => "Dies relief nennt sich : ridge")->pack;

my $f2 = $mw->Frame(-relief => 'groove',
                    -width => '100',
                    -height=> '50',
                    -borderwidth => '10')
                      -> pack(-side => 'bottom' ,
                              -pady => '10',
                              -padx => '5');

my $text2 = $f2->Label(-text => "Dies relief nennt sich : groove")
                         ->pack;

MainLoop;



So siehts aus :

Frames Tk und Perl

Weitere Reliefs mit denen sie rumspiele können wenn sie wollen wären.......

"flat" |"raised" | "sunken" | "solid"


ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf