Wie ein Programm im Programm sieht es aus, das Tk::Toplevel-Widget. Es erzeugt ein neues, eigenständiges Fenster. Im Prinzip ist es wie ein MainWindow, nur mit dem Unterschied, dass es das MainWindow als Eltern-Widget besitzt. Mittels Toplevels kann man also mehrere Fenster in einem Programm erstellen.
Dieses Beispiel zeigt ein einfaches Toplevel an (roter Hintergrund).
#!perl
use strict;
use warnings;
use Tk;
my $mw = tkinit(-background => 'blue');
$mw->Toplevel(
-background => 'red',
);
$mw->MainLoop();
Beispiel für Toplevel-Fenster, die per Tk::Button geöffnet werden.
#!perl
package Editform;
use strict;
use warnings;
use Tk;
sub new {
my $class = shift;
my $parent = shift;
my $self = bless({}, $class);
$self->{'__PARENT'} = $parent;
return $self;
} # /new
sub display {
my $self = shift;
my $parent = $self->{'__PARENT'};
my $tl = $parent->Toplevel(
-width => 200, -height => 200, -bg => 'blue',
);
return;
} # /display
1;
package Userimages;
use strict;
use warnings;
use Tk;
sub new {
my $class = shift;
my $parent = shift;
my $self = bless({}, $class);
$self->{'__PARENT'} = $parent;
return $self;
} # /new
sub display {
my $self = shift;
my $parent = $self->{'__PARENT'};
my $tl = $parent->Toplevel(
-width => 200, -height => 200, -bg => 'yellow',
);
return;
} # /display
1;
package main;
use strict;
use warnings;
use Tk;
my $mw = tkinit();
$mw->Button(
-text => 'dialog1',
-command => sub{
my $form = Editform->new($mw);
$form->display();
},
)->pack();
$mw->Button(
-text => 'Userimages',
-command => sub{
my $form = Userimages->new($mw);
$form->display();
},
)->pack();
$mw->MainLoop();