Tk::TList - tabellenförmige Listbox

Tk::TList kann alles, was die normale Tk::Listbox auch kann, also eine Liste von Objekten anzeigen.

Allerdings ist die Tk::TList der Lisbox in vielen Punkten überlegen.

So kann die TList beispielsweise eine Liste zweidimensional anzeigen. Dadurch können mehr Einträge gleichzeitig angezeigt werden. Benutzer können die gesuchten Objekte in der zweidimensionalen Liste ggf. schneller finden. Die Listenansicht des Windows-Explorers verwendet diese Art der Darstellung ebenfalls.

Außerdem kann die TList im Gegensatz zur Listbox auch etwas anderes als nur Text anzeigen.
Mögliche Inhalte sind: Text, Bilder und Widgets.

Ferner ist es möglich den Stil der einzelnen Elemente anzupassen. Jedes Element kann einen eigenen Stil (Schrift, Farbe) haben.

#!perl

use strict;
use warnings;
use Tk;
use Tk::TList;

my $mw = Tk::MainWindow->new();

my $tlist = $mw->Scrolled('TList',
	-scrollbars => 'os',
	-orient => 'vertical',
)->pack(-fill => 'both');

foreach my $item ( 1 .. 50 ) {
	$tlist->insert('end',
		-itemtype => 'text',
		-text => "Item $item",
	);
}

$mw->MainLoop();
exit(0);

Text und Bild können kombiniert werden. Dadurch ist eine Ansicht wie im Windows-Dateiexplorer möglich, wo Icons für Ordner oder Dateien neben deren Bezeichnung stehen:

$tlist->insert('end',
		-itemtype => 'imagetext', # Text + Bild anzeigen
		-image => $picture,       # Tk::Photo-Objekt
		-text => "Ordner",        # Text neben dem Bild
	);

Ein einfaches Beispiel für die Anzeige eines Ordner-Bildes (folder.png) sieht wie folgt aus:

Tk::TList mit Bild und Text

#!perl

use strict;
use warnings;
use Tk;
use Tk::TList;
use Tk::PNG;

my $mw = Tk::MainWindow->new();

my $tlist = $mw->Scrolled('TList',
	-scrollbars => 'os',
	-orient => 'vertical',
)->pack(-fill => 'both');

my $picture = $mw->Photo(-file => 'folder.png');

foreach my $item ( 1 .. 50 ) {
	$tlist->insert('end',
		-itemtype => 'imagetext',
		-image => $picture,
		-text => "Item $item",
	);
}

$mw->MainLoop();

Das folgende Beispiel zeigt ein etwas sinnvolleres Szenario, in dem ein Ordner ausgeselen und die Inahlte entsprechend dargestellt werden:

Tk::TList als Explorer-Ähnliche Ansicht

#!perl

use strict;
use warnings;
use FindBin qw/$Bin/;
use Tk;
use Tk::TList;
use Tk::PNG;
use File::Spec;
use File::Basename;
use File::Find::Rule;

my @subdirs = File::Find::Rule->directory->in( $Bin );
my @files = File::Find::Rule->file->in( $Bin );

my $mw = Tk::MainWindow->new();

my $tlist = $mw->Scrolled('TList',
	-scrollbars => 'os',
	-orient => 'vertical',
)->pack(-fill => 'both');

my $folder = $mw->Photo(-file => File::Spec->catfile($Bin, 'img', 'folder.png'));
my $file = $mw->Photo(-file => File::Spec->catfile($Bin, 'img', 'file.png'));

foreach my $fullname ( @subdirs, @files ) {
	my ($name,undef,undef) = fileparse($fullname);
	$tlist->insert('end',
		-itemtype => 'imagetext',
		-image => (-d $fullname ? $folder : $file),
		-text => "$name",
	);
}

$mw->MainLoop();
exit(0);

Die Reihenfolge, in der die zweidimensionale Liste aufgebaut werden kann, wird mit der Option -orient festgelegt. Oben zu sehen ist die Option vertical und unten horizontal.

Beide Möglichkeiten der Anordnung der Objekte in der Tk::TList

Für die, die es gerne etwas abstrakter mögen:

Anordnung von Objekte in der Tk::TList mit orient vertical und orient horizontal

Quellen

Top