|
|
KontrollelementeFür alle interaktiven Programme sind die Kontrollelemente zentraler Bestandteil ihrer Fenster. Die wichtigsten Elemente, ihre Ressourcen und der Umgang mit ihnen wird in diesem Abschnitt dargestellt.
LabelEin Label ist ein Beschriftungsfeld. Sie können es mit einem Text und einem Bild füllen. Davon abgesehen, ist es sehr temperamentslos. Es reagiert auf keine Ereignisse. In den allermeisten Fällen dient es nur der Beschriftung.
[Label Ressourcen]L|L|L
Ressource & Bedeutung & Werte
Eine Sonderform des Labels ist die Message. Man kann ihr längere Texte angeben, die sie je nach Raum selbstständig umbricht.
ButtonDer einfache Button ist ein Knopf, der auf das Anklicken mit der linken Maustaste reagiert. Ansonsten kann man ihn wie ein Label mit einem Text oder einem Bild versehen.
$meinFenster->Button(-text => "Schluss", -command => sub{faerbe('red')});
Neben der Beschriftung ist die wichtigste Eigenschaften eines Buttons, dass
man ihn anklicken kann. Mit der Option -command wird festgelegt, welche
Aktion dann ausgelöst wird. Oben wird bei Druck auf den Button die Funktion
Der Checkbutton ist eine Sonderform des Buttons. Duch Anklicken erhält er eine Marke. Wenn Sie ihn ein weiteres Mal anklicken, geht der Button in seinen Ursprungszustand zurück.
my $schoen= $mw->Checkbutton(-text =>"schön", -anchor=>'w')->pack(-fill,'x'); my $stark= $mw->Checkbutton(-text =>"stark", -anchor=>'w')->pack(-fill,'x'); my $klug= $mw->Checkbutton(-text =>"klug", -anchor=>'w')->pack(-fill,'x');$
Die Ressource -anchor bewirkt eine Ausrichtung nach links, wenn ihr Wert
wie oben 'w' ist. Das wirkt aber nur dann, wenn bei der Funktion Der Radiobutton ist eine andere Variante der Buttons. Man könnte ihn als eine Weiterentwicklung des Checkbutton ansprechen. Mehrere Buttons werden zusammengefasst. Es darf nur einer angewählt sein. Er hat seinen Namen von den Stationstasten eines Radios, von denen ja auch immer nur eine gleichzeitig angewählt sein kann. Wird eine andere gedrückt, springt die bisher gedrückte Taste heraus.
my $mw = MainWindow->new; my $radvar='red'; \par$ --> mw->Radiobutton(-text => 'rot', -variable=> $radvar, -value=>'red', -anchor=>'w')->pack(-fill,'x');$ --> mw->Radiobutton(-text => 'gelb', -variable=> $radvar, -value=>'yellow', -anchor=>'w')->pack(-fill,'x'); MainLoop;$ --> Relevant für die Funktionalität sind die Optionen -variable und -value. In der Variablen $radvar legen die Radiobuttons nicht nur ihren Wert ab, sie stellen anhand der Variablen auch fest, ob sie angewählt sind oder nicht. Dazu hat jeder Radiobutton einen eigenen Wert, die hinter in der Ressource -value abgelegt ist.
Listbox
Eine Listbox kann mehrere Zeilen aufnehmen.
Zunächst wird sie generiert wie andere Kontrollelemente. Eine wichtige
Ressource ist die Höhe, die angibt, wieviele Zeilen sichtbar sind.
Die Listbox kennt die Kommandos
#!/usr/bin/perl -w use strict; use Tk;
my $mw = MainWindow->new; my mw->Listbox(-height=> 5); list->insert(0,'gelb','blau','grün','rot','schwarz','weiß'); MainLoop;
[Listbox Ressourcen]L|L
Ressource & Werte
ScrollbarsScrollbars werden im Zusammenhang mit anderen Widgets gebraucht, wenn der Raum im Fenster zu klein ist, um das Widget komplett darzustellen Dann kann man einen Scrollbar verwenden, um den Ausschnitt auszuwählen, den man sehen möchte. So braucht der Scrollbar die Information, welches Widget er kontrollieren soll. Auf der anderen Seite braucht das kontrollierte Widget auch Informationen darüber, dass es von einem Scrollbar kontrolliert wird. Man löst das Problem, indem man zunächst das zu kontrollierende Widget erzeugt, dann den Scrollbar und schließlich dem Widget durch Ressourcenänderung mitteilt, dass es einen Scrollbar besitzt. Im folgenden Beispiel werden diese Schritte an einer Listbox demonstriert.
#!/usr/bin/perl -w use strict; use Tk;
my $mw = MainWindow->new; # Erzeuge die Listbox my$ list = $mw->Listbox(-height=> 5)->pack(-side, 'left'); # Dann den passenden Scrollbar my$ scroll = MATH $mw->Scrollbar(-command, [yview=>$list]); $scroll->pack(-side,'right', -fill,'y'); # Nun existiert ein Scrollbar und die Listbox sollte das wissen$ list->configure(-yscrollcommand => ['set', $scroll]); # Fuelle Werte in die Listbox...$ list->insert(0,'gelb','blau','grün','rot','schwarz','weiß'); MainLoop;
Da Scrollbars fast immer eingesetzt werden, um andere Widgets zu steuern, gibt es die Sonderform Scrolled. Damit werden kontrolliertes Widget und Scrollbar in einem Schritt erzeugt.
#!/usr/bin/perl -w # use strict; use Tk;
my $mw = MainWindow->new; my$ --> scrlist = $mw->Scrolled(Listbox,-height,5,-scrollbars=>'e');$ --> scrlist->insert(0,'gelb','blau','grün','rot','schwarz','weiß'); $scrlist->pack; MainLoop;$ --> Hinter der Option -scrollbars steht in der Zeichenkette, an welcher Seite des Widgets der Scrollbar angebracht sein soll. Die Seite wird durch die englischen Kürzel der Himmelsrichtungenen (n, e, s, w) angegeben. Im Beispiel oben ist der Scrollbar also an der rechten Seite. Durch Angabe der Zeichenkette 'se' wird sowohl rechts als auch unten ein Scrollbar angefügt.
Scale
Das Widget Scale ist ein Schieber, mit dem Sie Zahlenwerte einstellen können.
Mit dem Kommando
#!/usr/bin/perl -w use strict; use Tk;
my $mw = MainWindow->new; my mw->Label( -text=>"" )->pack; my mw->Scale(-from=>1, -to=>20, -orient=>'horizontal')->pack; $mw->Button(-text => "Zeige", -command => sub\{zeige()\},)->pack; MainLoop; \par sub zeige \{ my$ --> val = anzeige->configure(-text=> Das Widget Scale verwendet folgende Ressourcen:
[Scale Ressourcen]L|L
Ressource & Werte
EntryDas Widget Entry dient der Eingabe einer Zeichenkette. Das folgende Beispiel erzeugt ein Fenster, mit einem Eingabefeld, einem Label und einem Button. Wenn Sie etwas in das Eingabefeld eintippen und dann den Button anklicken, wird der Inhalt im Label angezeigt.
#!/usr/bin/perl -w use strict; use Tk;
my $mw = MainWindow->new; my mw->Label( -text=>"" )->pack; my mw->Entry()->pack; $mw->Button(-text => "Zeige", -command => sub\{zeige()\},)->pack; MainLoop; \par sub zeige \{ my$ --> val = anzeige->configure(-text=>
[Entry Ressourcen]L|L
Ressource & Werte
Neben diesen Grundfunktionen gibt es natürlich eine Menge Möglichkeiten,
mit Eingabefeldern umzugehen. Dabei ist allein der Umgang mit Selektionen,
also Markierungen im Text sehr umfangreicht. Genauere Informationen bekommt
man über
MenüsZu jedem etwas größeren Programm gehört auch ein Menübaum. Dieser besteht aus mehreren Elementen, die im Programm nacheinander generiert werden. Zunächst wird die Menüleiste (engl. menubar) erzeugt. Sie befindet sich immer am Kopf eines Fensters. Diese Position nennt sich unter Tk toplevel. In der Menüleiste werden kaskadierende Buttons eingesetzt, die beim Anklicken das eigentliche Menü aufklappen. Dahinter endlich verbergen sich die eigentlichen Menüpunkte, die bei Tk Command heißen und wie gewöhnliche Buttons funktionieren. Auch ihnen wird bei Erzeugung eine Callbackfunktion zugeordnet. Allerdings ist das nicht zwingend. Im Beispiel ist als zweite Kaskade eine Farbenselektion eingebaut, hinter der sich Radiobuttons verbergen. Wegen des Unterhaltungswertes sind die Menüpunkte auch gleich in der Farbe dargestellt, die man damit anwählen kann.
#!/usr/bin/perl -w use strict; use Tk;
my $mw = MainWindow->new; my mw->toplevel;
# Die Menueleiste wird in den Kopf des Fensters gehaengt my toplevel->Menu(-type => 'menubar'); $toplevel->configure(-menu =>$ --> menubar);
# Nun bauen wir ein Datei-Menue my menubar->cascade(-label => ' Datei', -tearoff => 0);
$datei->command(-label => 'Zeige', -command => sub\{zeige()\});$ datei->command(-label => 'Piep', -command => datei->command(-label => 'Quit', -command => $mw=>'destroy']); my$ farbe = $menubar->cascade(-label => '~Farbe', -tearoff => 0); \par my$ farbe->radiobutton(-label => 'rot', -command => sub{faerbe('red')}, -background => 'red'); $farbe->radiobutton(-label => 'gelb', -command => sub\{faerbe('yellow')\}, -background => 'yellow'); \par my$ anzeige = $mw->Label( -text=>"" )->pack; my$ entry = MATH $mw->Entry()->pack;$ mw->Button(-text => "Zeige", -command => sub{zeige()}, )->pack; MainLoop;
sub zeige { my entry->get; $anzeige->configure(-text=>$ val); }
sub faerbe { $entry->configure(-background =>$_[0]); } Inhaltlich ist das Programm nichts anderes als das Beispielprogramm für das Eingabefeld Entry. Allerdings gibt es nun die Möglichkeit, aus dem Menü heraus die Zeigefunktion zu aktivieren.
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|