Sehr Umfangreiche Webseite zum Programmieren in C Perl CGI, Skripting, Linux, SystemprogrammierungPerl Perl Kurs Skripting Tk-Modul use Tk; Tcl/Tk Frames Tk Frames Steuerelement Perl Skript Tk-Modul Tk use Tk Perl mit dem Tk-Modul Teil 8

Steuerelemente - Frames           zurück zum Inhaltsverzeichnis

Um Beispielsweise die Radiobuttons und die Checkbuttons im Fenster zu trennen benötigen Sie Frames. Mit Frames teilen Sie den Bereich im Fenster in mehrere (unsichtbare) Bereiche auf. Hierzu ein Skript, wie man Frames in mehreren Bereiche aufteilt  ...

#! /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 (Linux/Unix):

Steuerelement Frames Linux/Unix

So siehts aus (MS Windows):

Steuerelement Frames MS Windows

In diesem Beispiel richten Sie mit ...

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

... eine linken und einen rechten Bereich (Frame) im MainWindow ein. Der Zugriff erfolgt dann über den einzelnen Framebereichen und nicht mehr über die Referenz des MainWindows. Wenn Sie jetzt noch ein dritten 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 Sie in der Lage mittels Frames mehrer Widget zusammenzufassen. Hier noch ein paar weitere Skripte 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 (Linux/Unix):

Steuerelement Frames Linux/Unix

So siehts aus (MS Windows):

Steuerelement Frames MS Windows

Durch die Anweisung -side, des Geometriemanagers pack, wird dafür gesorgt, dass immer das nächste Frame oben ist. Hier wird die Deutsche Nationalflagge dargestellt. Das Ganze nun um 90 Grad gedreht ...

#!/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 (Linux/Unix):

Steuerelement Frames Linux/Unix

So siehts aus (MS Windows):

Steuerelement Frames MS Windows

Jetzt  wird jeder neue Frame immer erst an der linken Seite dargestellt. Es 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 (Linux/Unix):

Steuerelement Frames Linux/Unix

So siehts aus (MS Windows):

Steuerelement Frames MS Windows

Zuerst wird immer ein Frame oben erzeugt in dem immer 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 (Linux/Unix):

Steuerelement Frames Linux/Unix

So siehts aus (MS Windows):

Steuerelement Frames MS Windows

Weitere Reliefs mit denen Sie rumspiele können wären ...

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