|
|
Widgetanordnung
Im vorigen Abschnitt wurde bereits von der Funktion
Durch die Option -side kann die Richtung angegeben werden, von der aus das
Fenster aufgefüllt wird. Die üblichen Argumente der Option sind 'top' und
'left'. Dann werden die Widgets nacheinander von oben nach unten, respektive
von links nach rechts aufgefüllt. Natürlich gibt es auch die Argumente
'bottom' und 'right'. Der Vorgabewert ist übrigens 'top'.
Das Vorgehen kann man sich vorstellen, als würde man mit der Kreissäge
ein Stück des Fensters abschneiden. Ein Aufruf von
Das Absägen des Titels ist noch trivial. In dem Moment, wo Sie aber links die Listbox abtrennen, bekommen Sie den Button nicht mehr unter die Listbox. Schneiden Sie dagegen die Listbox oben ab, fehlt Ihnen der Scrollbar an der rechten Seite. Man müsste Listbox und Scrollbar gemeinsam abtrennen können. Genau zu diesem Zweck gibt es Rahmen, die Tk Frame nennt. Sie werden wie ein normales Widget erzeugt, bekommen aber ihre Bedeutung beim Packen. Listbox und Scrollbar geben ihrer Packfunktion die zusätzliche Option -in und als Argument die Framevariable.
#!/usr/bin/perl -w use strict; use Tk;
my $mw = MainWindow->new; my$ titel = $mw->Label(-text=>"Oben", -relief=>'groove'); my$ framelist = liste = $mw->Listbox(-height => 4); my$ scroll = $mw->Scrollbar(-command, [yview=>$ liste]); $liste->configure(-yscrollcommand => ['set',$ scroll]); my mw->Button(-text => "Links"); my mw->Button(-text => "Rechts"); $liste->insert(0,'eins','zwei','drei','vier','fünf'); # Anordnung der beteiligten Akteure$ titel->pack(-side,'top'); $framelist->pack(-side,'top');$ liste->pack(-in=> $framelist, -side,'left');$ scroll->pack(-in=> $framelist, -side,'right');$ lbut->pack(-side,'left'); $rbut->pack(-side,'right'); MainLoop;$ Nun sind die Elemente an den gewünschten Positionen. Beim näheren Betrachten stellen Sie aber fest, dass der Scrollbar sehr klein geraten ist. Und auch die Überschrift ist ein wenig zu kurz gekommen.
Ein Widget wird von sich aus nur soviel Platz in Anspruch nehmen, wie es benötigt. Diese Bescheidenheit bewirkt aber optische Unschönheiten, wenn beispielsweise drei unterschiedlich breite Buttons untereinander angeordnet sind. Hier kann man das Widget auffordern, den Raum in x-Richtung aufzufüllen, indem man als Argument für -fill 'x' angibt. Naheliegenderweise gibt es dann auch 'y' für das senkrechte Ausfüllen. Das Argument 'none' ist der Vorgabewert und füllt gar nichts aus. Im Beispiel muss dem Scrollbar mitgeteilt werden, dass er bitte den vertikalen Raum füllen möge und den Titel müssen Sie anweisen, die gesamte Breite zu belegen. Die geänderten Zeilen lauten:
$titel->pack(-side,'top',-fill=>'x'); $scroll->pack(-in=> $framelist, -side,'right',-fill=>'y');$
InformationenFür die Erstellung von grafischen Oberlächen mit Perl und Tk gibt es eine eigene Manpage. Ihr Aufruf lautet:man perl/Tk
Eine weitere Informationsquelle ist das Demoprogramm widget .
Dies zeigt mehrere Beispiele für Widgets und die zugehörigen Quelltexte für
Perl/Tk.
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|