Tutorial zu Perl mit dem Tk-Modul

Kapitel 9 : Steuerelemente - Scrollbar und Listbox


Zurück Index Weiter


Sie haben ja bereits kurz gesehen wie Sie Listboxen einsetzen können. Richtig funktional werden diese aber erst mit Hilfe einer Möglichkeit zum Scrollen, einer Scrollbar. Sehen wir uns also ein Beispiel an, wie Sie durch eine Liste scrollen können:

scroll_listbox1.pl

#!/usr/bin/perl
use strict;
use warnings;

use Tk;

my $main   = MainWindow->new();

my $box    = $main->Listbox(-height => 5
                           )
                     ->pack(-side   => 'left',
                            -fill   => 'both',
                            -expand => 1,
                           );
$box->insert('end', $_) for qw(Eins Zwei Drei Vier Fünf Sechs Sieben Acht Neun Zehn);

my $scroll = $main->Scrollbar(-command => [ 'yview', $box ]);

$box->configure(-yscrollcommand => [ 'set', $scroll ]);

$scroll->pack(-side => 'right',
              -fill => 'y',
             );

MainLoop();

So sieht das Ergebnis unter Linux/Unix aus:

tk15.png

und so unter Windows:

tk15_win.png

(Aktuelle Bilder für Linux werden noch nachgestellt.)

Entscheidend sind die beiden Zeilen ...

my $scroll = $main->Scrollbar(-command => [ 'yview', $box ]);
$box->configure(-yscrollcommand => [ 'set', $scroll ]);

Das Kommando ['yview', $box] in der Scrollbar bedeutet soviel das Sie den "Scrollbutton" in y-Richtung, also Auf-und Abbewegen können. Der Inhalt, der dabei mitbewegt wird, ist die Referenz auf die Listbox $box. Wenn Sie beispielsweise schreiben würden ['xview', $box] würde sich die Scrollbar nicht mehr bewegen lassen, da die x-Richtung aktiviert haben. Die Listbox müssen Sie auch noch mit -yscrollcommand => ['set', $scroll] auf die y-Richtung einstellen und mit der Scrollbar verbinden.

Die Methode configure werden Sie auch noch häufiger sehen. Damit ist es möglich, Widgets-Optionen (nachträglich) zu ändern.

[An dieser Stelle kommt man um ihre Verwendung auch nicht herum, denn man hat eigentlich eine zyklische Abhängigkeit: Zur vollständigen Definition der Listbox benötigt man das Scrollbar-Element und zur vollständigen Definition des Scrollbar-Elementes benötigt man die Listbox. Um dieses Dilemma aufzuheben, wird im Beispiel die Box nachträglich per configure um die Option -yscrollcommand erweitert.]


Es gibt aber noch eine andere Möglichkeit, "normale" Scrollbars zu erzeugen, nämlich mit dem Fensterelement Scrolled. Dies ist ein Pseudoemelement, dem als erstes Argument die Bezeichnung des eigentlich zu erzeugenden Fensterelements bekommt (im Beispiel Listbox).

Mit der Option -scrollbars => 'oe' gibt man an, dass eine optionale "östliche" (also auf der rechten Seite des anzulegenden Elements zu plazierende) Scrollbar erzeugt werden soll (diese wird nur angezeigt, wenn mehr Elemente in der Listbox eingetragen sind als angezeigt werden können.

scroll_listbox2.pl

#!/usr/bin/perl
use strict;
use warnings;

use Tk;

my $main   = MainWindow->new();

my $box    = $main->Scrolled('Listbox',
                             -scrollbars => 'oe',
                             -height     => 5,
                           )
                     ->pack(-side        => 'left',
                            -fill        => 'both',
                            -expand      => 1,
                           );
$box->insert('end', $_) for qw(Eins Zwei Drei Vier Fünf Sechs Sieben Acht Neun Zehn);


MainLoop();

Das erzeugte Programm funktioniert genauso wie die erste Variante. Aber man kann sich eine Menge Schreibarbeit sparen. Die direkte Verwendung des Elements Scrollbar ist eigentlich nur noch für Besonderheiten nötig, wie etwa das Scrollen zweier Elemente mit einer Scrollbar oder ähnliches.


Weitere Einzelheiten findet man wie immer unter perldoc Tk::Scrollbar und perldoc Tk::Scrolled.


Zurück Index Weiter


-- ChristianDuehl - 09 Dec 2003

-- ChristianDuehl - 18 Dec 2003

-- ChristianDuehl - 19 Dec 2003
Topic attachments
I Attachment Action Size Date Who Comment
scroll_listbox1.pl.txttxt scroll_listbox1.pl.txt manage 0.6 K 2003-12-19 - 00:56 ChristianDuehl Programmcode zum Programm scroll_listbox1.pl
scroll_listbox2.pl.txttxt scroll_listbox2.pl.txt manage 0.5 K 2003-12-19 - 00:56 ChristianDuehl Programmcode zum Programm scroll_listbox2.pl
Topic revision: 2003-12-19, ChristianDuehl
 
Bitte die NutzungsBedingungen beachten.
Bei Vorschlägen, Anfragen oder Problemen mit dem PerlCommunityWiki bitten wir um WebBottomBarExample">Rückmeldung.