Galileo Computing < openbook >
Galileo Computing - Bücher zur Programmierung und Softwareentwicklung
Galileo Computing - Bücher zur Programmierung und Softwareentwicklung


'Wie werde ich Unix-Guru' als Buch bestellen
A. Willemer
Wie werde ich UNIX-Guru
I  ANWENDUNG
Know-How für Unix/Linux-User: Einführung, Shell, Befehle, Hilfe, Arbeit mit Dateien, Editoren, Reguläre Ausdrücke, nützliche Tools, Hardware.

II  ADMINISTRATION
Tools, Systemstart, Benutzer verwalten, Hardware konfigurieren, Software installieren, Datensicherung, Tuning, Kernel

III  NETZWERK
Client/Server Systeme, TCP/IP, Routing, IPv6, Internet-Dienste, DHCP, Webserver, Firewalls

IV  DAS X-WINDOW SYSTEM
Die grafische Oberfläche von UNIX einrichten und nutzen

V  PROGRAMMIERUNG VON SHELLSKRIPTEN
Automatisieren von Tasks durch Shell-Skripte.

VI  PERL
Interpreter, Syntax, Variablen, Steuerung, Funktionen, UNIX-Aufrufe, GUIs mit Tk

VII  PROGRAMMIERWERKZEUGE
C-Compiler, Analyse-Tools, CVS, yacc, diff

VIII  UNIX-SYSTEMAUFRUFE
UNIX-Befehle in eigenen Programmen nutzen

IX  LITERATUR
Weiterführende Literatur zu UNIX und LINUX

 
Galileo Computing / <openbook> / "Wie werde ich UNIX-Guru ?"
« Widgets und Ressourcen Grafische Oberfläche: Tk Widgetanordnung »

Unterabschnitte
  • Label
  • Button
  • Listbox
  • Scrollbars
  • Scale
  • Entry
  • Menüs

Kontrollelemente

Fü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.

Label

Ein 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
-text & Beschriftung & Zeichenkette
-font & Schrift & Zeichensatzbezeichnung

Eine Sonderform des Labels ist die Message. Man kann ihr längere Texte angeben, die sie je nach Raum selbstständig umbricht.

Button

Der 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 faerbe aufgerufen. Man nennt eine solche Funktion auch Callback. Solche Callbacks sind die Schnittstelle zwischen den Benutzeraktionen an der Oberfläche und dem eigentlichen Programm.

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');$


Checkboxen mit Tk und Perl

Die Ressource -anchor bewirkt eine Ausrichtung nach links, wenn ihr Wert wie oben 'w' ist. Das wirkt aber nur dann, wenn bei der Funktion pack angegeben ist, dass das Widget den gesamten Raum in X-Richtung füllen soll. Auf die Ausrichtung und Anordnung von Widgets wird später näher eingegangen (siehe S. pack).

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.


Radio-Buttons unter Perl und Tk

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 insert zum Einfügen von Zeilen, delete zum Löschen und get, um den Inhalt einer Zeile auszulesen.

#!/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
-height & Anzahl der sichtbaren Zeilen

Scrollbars

Scrollbars 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;


Scrollbars mit tklist

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 get lässt sich der Zahlenwert auslesen. Das folgende Beispiel erzeugt einen solchen Schieber und übernimmt auf Drücken des Buttons den Wert in ein Label.


Das Scale-Widget kann Zahlenwerte einstellen

#!/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
-label & Beschriftung
-from & Min. Wert (numerisch)
-to & Max. Wert (numerisch)
-length & Zahlenwert
-orientation & horizontal oder vertical

Entry

Das 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.


Entry

#!/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
-label & Beschriftung
-textvariable & Variable

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 man Tk::Entry.

Menüs

Zu 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.


Menüs leicht gemacht mit Tk

#!/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.



« Widgets und Ressourcen | Grafische Oberfläche: Tk | Widgetanordnung »
 
 Zum Katalog
Zum Katalog
Wie werde ich UNIX-Guru?
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 UNIX/Linux

PHP 4-Workshop

Einstieg in Python

Perl fürs Web

MySQL 4

GNOME 2.0
 Empfehlung

Einstieg in XML
 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
Info

 MyGalileo
Der Service für registrierte Leser:
Zu MyGalileo
Info



Copyright © Galileo Press GmbH 2003
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.
[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de