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:
#!/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:
#!/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:
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.