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:
und so unter Windows:
(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