Tk::Toplevel - Eigenständige Fenster

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.


Minimalbeispiel

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();

Programm im Programm

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();
Top