GUI mit Perl/Tk

Perl/Tk-Tutorial

Kapitel 5: Steuerelement - Toplevel

Die Ausgabe des Programms namen_eingeben.pl im Kapitel zuvor hätten Sie ja bestimmt schon gerne auf ein Fenster ausgegeben, anstatt auf der Konsole.

Ein neues Fenster außer dem MainWindow können Sie mit dem Steuerelement Toplevel erzeugen:

toplevel.pl

#!/usr/bin/perl

use strict;
use warnings;
use Tk;

my $main  = MainWindow->new();
my $child = $main->Toplevel();

$main->MainLoop();

Wenn Sie das Programm übersetzen, werden Sie zwei Fenster auf dem Bildschirm sehen. Beachten Sie bitte auch, dass wenn Sie zuerst das Hauptfenster (MainWindow) schließen, das andere Fenster auch automatisch geschlossen wird. Das aktive Fenster ist das Kind-Fenster, da dieses zuletzt erzeugt wurde.

Das neu erzeugte Fenster $child ist nur ein Abkömmling (Kind) von dem Hauptfenster (Eltern) und kann ohne dieses nicht existieren.

Das Ganze wieder in der Praxis in Abwandlung des Programms namen_eingeben.pl aus Kapitel 4:

namen_eingeben2.pl

#!/usr/bin/perl

use strict;
use warnings;
use Tk;

my $fenster   = MainWindow->new();
my $text      = $fenster->Label(
    -text     => 'Bitte geben sie Ihren Namen ein:',
    -height   =>  5,
    -width    => 40,
);
my $eingabe   = $fenster->Entry();

my $schalter  = $fenster->Button(
    -text    => 'OK',
    -height  => 1,
    -width   => 4,
    -command => \&eingabe_bearbeiten,
);
my $schalter2 = $fenster->Button(
    -text    => 'Ende',
    -height  => 1,
    -width   => 4,
    -command => sub { exit },
);

$text     ->pack();
$eingabe  ->pack();
$schalter ->pack();
$schalter2->pack();

$fenster->MainLoop();

sub eingabe_bearbeiten {
    my $popup = $fenster->Toplevel();
    $popup->Label(-text    => 'Hallo ' . $eingabe->get() )->pack();
    $popup->Button(-text    => 'close',
                   -command => sub { $popup->destroy() } )->pack;
    $eingabe->delete(0, 'end');
}

So sieht das Ergebnis aus:

Eingabefeld für Namen, Ausgabe in Toplevel

Jetzt haben Sie eine reine 'fensterorientierte' Anwendung. Mit der Option

-command => sub { $popup->destroy() }

mussten Sie diesmal direkt das (Kind-) Toplevel-Fenster zerstören, da die bisher verwendete Methode mit sub {exit} das gesamte Programm beenden würde.

Mehr zum Steuerelement Toplevel finden Sie auf der Widget-Seite zum Toplevel.

Top