Home / LinuxUser / 2000 / 08 / Einführung in Tcl/Tk, Teil 3

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.

Die Kommandozeile macht sich schön

Einführung in Tcl/Tk, Teil 3

Die goldene Mitte

Im Mittelteil stehen jeweils links Beschriftungen ("Label") mit der Erläuterung, was im rechts daneben liegenden Widget eingestellt wird. Labels sind Einfach-Widgets, die von sich aus kein 3D-Aussehen haben, sondern einfach nur Text anzeigen.

Sie benötigen drei Labels: für den Bildnamen, die Bildbreite und die -höhe.

label .bildnameAufschrift   -text Bildname
label .bildbreiteAufschrift -text Bildbreite
label .bildhoeheAufschrift  -text Bildhöhe

Bleibt der rechte Teil der Mitte: In der obersten Reihe liegt das Eingabefeld. Später wird darin der Name der Bilddatei angezeigt und kann von der Nutzerin geändert werden. Im Moment interessiert aber nur die reine Optik. Legen Sie das Feld also einfach mit dem Befehl entry, gefolgt von seinem Widgetnamen, an. Um auch genug Platz für längere Dateinamen zu haben, können Sie jetzt schon einmal festlegen, dass im Entry 30 Buchstaben gleichzeitig sichtbar sein sollen. Dies erreichen Sie durch die Option -width Zahl, wobei Zahl die sichtbaren Buchstaben angibt:

entry .bildnameEingabefeld -width 30

Unter dem Eingabefeld liegen die Schieberegler ("Scale"). Diese kennen außer den "normalen" Optionen noch jeweils eine für den Startwert der Skala (-from Zahl) und ihren Endwert (-to Zahl).

Normalerweise werden Skalen senkrecht stehend dargestellt. Im Prototypen sind sie aber waagerecht eingezeichnet. Deswegen brauchen Sie zusätzlich noch die Option -orient horizontal:

scale .bildbreiteScale -from 20 -to 400 -orient horizontal
scale .bildhoeheScale  -from 20 -to 400 -orient horizontal

Nun sollen die Widgets angezeigt werden. Damit betrauen wir diesmal den gridder. Ihm muss auch wieder der Widgetname und nach der Option -in Eltern-Widget das Eltern-Widget mitgeteilt werden. Danach folgen allerdings andere Optionen.

Jedes Widget kommt in eine Zelle, deren Lage durch die Zeilenangabe -row Nummer und ihre Spaltennummer (-column Nummer) fest gelegt wird, wobei sowohl die Zeilen- als auch die Spaltenzählung bei 0 beginnt. Die Spalten werden von links nach rechts gezühlt, die Reihen von oben nach unten. Innerhalb dieser Zelle können die Widgets an den Zellwänden "fest geklebt" werden. Dies funktioniert mit der Option -sticky Richtung. Als Richtung dienen w,e,n oder s für die Himmelsrichtungen. Werden gegenüber liegende Richtungen angegeben, dehnt sich das Widget so weit, bis es die jeweiligen Zellwände berührt.

grid .bildnameAufschrift   -in .mittlererRahmen -row 0 -column 0 -sticky sw
grid .bildnameEingabefeld  -in .mittlererRahmen -row 0 -column 1 -sticky we
grid .bildbreiteAufschrift -in .mittlererRahmen -row 1 -column 0 -sticky sw
grid .bildbreiteScale      -in .mittlererRahmen -row 1 -column 1 -sticky we
grid .bildhoeheAufschrift  -in .mittlererRahmen -row 2 -column 0 -sticky sw
grid .bildhoeheScale       -in .mittlererRahmen -row 2 -column 1 -sticky we

Dem Ganzen einen Namen geben

Zu guter Letzt bleibt noch die Korrektur eines kleinen Schönheitsfehlers: Vielleicht ist Ihnen aufgefallen, dass in der Titelzeile Ihres Programms immer povgui.tcl steht. Falls Sie dort lieber einen anderen Titel sehen möchten, z.B povgui, dann können Sie den Tk-Window-Manager wm anweisen, ihn für Sie zu ändern. Sie müssen ihm dazu den Namen des betreffenden Fensters mitgeben, hier also den des Ur-Widgets ".":

wm title . povgui

Wenn Sie Ihr Programm nun laufen lassen, es so aussieht wie in Abbildung 2 und Ihnen dazu noch gefällt, dann haben Sie gewonnen. Aber vielleicht möchten Sie ja noch ein wenig daran feilen?

Die hier im Text verwendeten Optionen (und auch noch ein paar andere) sind in Tabelle 1 zusammen gestellt. Sie soll Ihnen dabei helfen, das GUI Ihren Wünschen anzupassen.

Im letzten Teil dieser Serie lernen Sie dann, Prozeduren zu schreiben, Dateimanager aufzurufen und all dieses Wissen in Ihr GUI einzubauen.

Tabelle 1: Optionen für Tk-Widgets

Allgemeine Optionen für alle Widgets
-borderwidth Pixel Kantenbreite. Für "normales" 3D-Aussehen ist die Borderwidth 2 Pixel breit.
-relief Reliefart Aussehen eines Widgets. Abbildung 6 zeigt die möglichen Reliefarten.
Optionen für alle Widgets mit Schrift
-text Aufschrift Aufschrift eines Widgets.
-width Breite Breite des Widgets in Zeichen.
-foreground Farbe Schriftfarbe. Farbe kann durch Standardfarbnamen des Systems (zu finden in der Datei rgb.txt) oder in der #RRGGBB-Schreibweise als Zusammenstellung der Farbanteile von Rot, Grün und Blau angegeben werden. Die Anteile legt man hexadezimal (also mit den Ziffern 0 für Null bis f für 15) fest. Schwarz ist #000000, Weiß #ffffff, Rot #ff0000 usw.
-background Farbe Widget-Hintergrund. Die Farbe wird wie bei -foreground angegeben.
-anchor Richtung Die Richtung, in der die Aufschrift eines Widgets beginnt. Richtung kann n, s, e und w für die Himmelsrichtungen sein.
Optionen für Buttons, Labels und Menübuttons
-image [image create photo -file Bildname ] Zeigt auf einem Button oder Label ein Bild an. Bildname muss ein Bild im Format png, pgm oder ppm sein und kann mit relativem oder absolutem Pfad angegeben werden. image create photo macht die mit Bildname übergebene Bilddatei für Tk lesbar. Wegen der eckigen Klammern wird das Ergebnis dann an die Option -image weitergegeben.
-font { Font } Font ersetzt man durch einen Schriftnamen wie z.B. Helvetica 20 oder die genaue Bezeichnung wie Adobe-Helvetica-Medium-R-Normal--*-180-*.
-command { Befehl } Der bei einem Buttonklick ausgeführte Befehl. Um Unix-Befehle auszuführen, muss ihnen ein exec voraus gehen, z.B. exec netscape. (Gilt nicht für Labels.)
-menu Menüname Bindet ein Menü an den Menübutton. Dieses muss allerdings explizit mit dem Befehl menu Menüname angelegt werden. (Gilt nur für Menübuttons.)
Optionen für Scales
-orient Richtung Bezeichnet die Richtung, in der die Skala verlaufen soll. Richtung kann horizontal oder vertical sein.
-from Zahl Startwert einer Skala. Die Voreinstellung für Zahl ist 0.
-to Zahl Endwert einer Skala. Zahl ist auf 100 voreingestellt.
Abbildung 6

Abbildung 6: Reliefarten

Tabelle 2: Die verwendeten Optionen des Geometrie-Managers pack

-side Richtung Die Seite, von der die Widgets "eingefüllt" werden. Richtung kann left, right, bottom oder top sein. Bei top und bottom liegen die Widgets übereinander, bei left und right nebeneinander.
-expand yes Ermöglicht, dass die Widgets "mitwachsen", wenn die Fenstergröße von der Nutzerin geändert wird.
-fill Richtung Richtung, in der die Widgets ausgedehnt werden sollen. Mögliche Werte: x, y, both.

Tabelle 3: Die vorgestellten Optionen des Geometrie-Managers grid

-row Zeile Zeile, in der das Widget erscheinen soll.
-column Spalte Spalte, in der das Widget angezeigt werden soll.
-sticky Richtung Richtung, in der die Widgets "angeklebt" werden, um sich bis zur Zellenwand auszudehnen. Als Richtungen dienen eine oder mehrere der Himmelsrichtungen w, e ,n, s (ohne Komma oder Zwischenraum bei mehreren Angaben).
-rowspan Anzahl Anzahl der Zeilen, über die sich ein Widget erstreckt, falls es über eine Zeile hinaus gehen soll.
-columnspan Anzahl Anzahl der Spalten, die ein Widget überstreicht, sofern größer als Eins.

Listing 1

povguis Oberfläche

#!/bin/sh
#\
exec wish "$0"
# Die Frames, in denen die anderen Widgets angeordnet werden:
frame .obererRahmen    -borderwidth 1 -relief raised
frame .mittlererRahmen -borderwidth 1 -relief raised
frame .untererRahmen   -borderwidth 1 -relief raised
pack .obererRahmen    -side top -fill x
pack .mittlererRahmen -side top -fill x
pack .untererRahmen   -side top -fill x
# Die Buttons in der unteren Zeile:
button .renderKnopf  -text Rendern
button .anzeigeKnopf -text Anzeigen
pack .renderKnopf  -in .untererRahmen \
    -side left -fill x -expand yes
pack .anzeigeKnopf -in .untererRahmen \
    -side left -fill x -expand yes
# Der Menübutton mit Menü:
menubutton .dateiKnopf -text Datei -menu .dateiKnopf.herunterklappMenue
menu .dateiKnopf.herunterklappMenue
.dateiKnopf.herunterklappMenue add command -label "Szenendatei wählen ..."
.dateiKnopf.herunterklappMenue add separator
.dateiKnopf.herunterklappMenue add command -label "Beenden" -command exit
pack .dateiKnopf -in .obererRahmen -side left
# Die Beschriftung für Eingabefeld und Schieberegler:
label .bildnameAufschrift   -text Bildname
label .bildbreiteAufschrift -text Bildbreite
label .bildhoeheAufschrift  -text Bildhöhe
# Eingabefeld und Schieberegler:
entry .bildnameEingabefeld -width 30
scale .bildbreiteScale -from 20 -to 400 -orient horizontal
scale .bildhoeheScale  -from 20 -to 400 -orient horizontal
# Anordnen der Widgets im mittleren Teil:
grid .bildnameAufschrift   -in .mittlererRahmen -row 0 -column 0 -sticky sw
grid .bildbreiteAufschrift -in .mittlererRahmen -row 1 -column 0 -sticky sw
grid .bildhoeheAufschrift  -in .mittlererRahmen -row 2 -column 0 -sticky sw
grid .bildnameEingabefeld  -in .mittlererRahmen -row 0 -column 1 -sticky we
grid .bildbreiteScale      -in .mittlererRahmen -row 1 -column 1 -sticky we
grid .bildhoeheScale       -in .mittlererRahmen -row 2 -column 1 -sticky we
# Aendern des Fenstertitels:
wm title . "povgui"

Wie geht's weiter?

Im vierten und letzten Teil in Heft 10/2000 fügen wir die Funktionen zu diesem GUI hinzu, darunter den Aufruf eines Dateimanagers, und gestalten Unterprogramme.

Glossar

Widget-Library

Die Zusammenstellung von Funktionen zur Erzeugung von Fensterelementen ("Widgets") wie z.B. Buttons und Menüs.

Interpreter

Interpreter übersetzen ein Programm jedesmal, wenn es aufgerufen wird, in Maschinencode. Die Übersetzung wird anders als bei kompilierten Programmen nicht auf Dauer gespeichert.

Raytracer

Beim Raytracing ("Strahlenverfolgen") wird für jeden einzelnen Bildpunkt ("Pixel") der Strahlengang vom Beobachter (Kamera) zu den Lichtquellen zurück verfolgt. Trifft der Strahl auf ein Objekt, dann versucht der Raytracer, ihm vom Auftreffpunkt ausgehend zu allen Lichtquellen der Szene nach zu gehen. Liegt im weiteren Strahlengang ein zweites Objekt, so wirft dieses einen Schatten auf das erste. Aus all diesen Überprüfungen und der Farbe des Objekts ergibt sich schließlich eine Farbe für den Pixel.

rendern

Erstellen eines Bildes aus mathematischen Daten. Im Falle von Povray werden diese Daten aus einer Szenenbeschreibung generiert.

Pfad

1) Die Zusammenstellung der Verzeichnisse, in der ihre Shell nach ausführbaren Programmen sucht. 2) Die komplette Angabe des Standorts einer Datei innerhalb des Verzeichnisbaums. Der Pfad zur Datei kann relativ, also vom aktuellen Verzeichnis, oder absolut, d.h. vom Wurzelverzeichnis "/" aus angegeben werden.

.

Der Punkt bezeichnet das aktuelle Verzeichnis, in dem Sie sich gerade befinden. Ist dieses nicht explizit im Pfad enthalten, muss es extra angegeben werden, um Programme darin auszuführen.

GUI

"Graphical User Interface", zu deutsch "grafische Benutzeroberfläche". Der Teil des Programms, welches die Nutzer sehen, und über das sie auf die Funktionalität des Programms zugreifen.

Infos

[1] Eine gute Einführung in Povray ist von Christian Perle im Linux-Magazin 04/1998 erschienen. Sie ist auch im WWW erhältlich: http://www.linux-magazin.de/ausgabe/1998/04/Povray/povray.html

[2] Falls Sie Povray noch nicht haben, bekommen Sie es hier: http://www.povray.org/

[3] Tcl/Tk ist zwar bei jeder Distribution dabei, im Source-Code können Sie es aber auch herunter laden bei: http://www.scriptics.com/

[4] John Ousterhout, der "Erfinder" von Tcl/Tk hat selbst ein sehr lesenswertes Buch über Tcl/Tk geschrieben: Ousterhout, John K.: "Tcl und Tk", Addison-Wesley, Bonn 1995

[5] Wenn Sie schon über Tcl/Tk-Grundkenntnisse verfügen, die Sie auf sinnvolle Weise vertiefen möchten, ist folgendes Buch zu empfehlen: Harrison, Mark und McLennan, Michael: "Effektiv Tcl/Tk programmieren", Addison-Wesley, Bonn 1998

[6] Online-Infos bekommen Sie unter anderem bei: http://www.sco.com/Technology/tcl/Tcl.html

[7] Der erste Teil dieser Programmiereinführung ist erschienen im Linux-Magazin 04/2000, S. 120--124 und online abrufbar unter: http://www.linux-user.de/ausgabe/2000/06/TclTk1/tcl1.html

[8] Teil Zwei können Sie nachlesen im Linux-Magazin 06/2000, S. 148--153

[9] Linux-User 06/2000, S. 78--83

Der Autor

Sibylle Nägle macht gerade ihr Maschinenbau-Diplom in Kassel und ist froh, dafür mit Tcl programmieren zu dürfen.

Tip a friend    Druckansicht Bookmark and Share
Kommentare

Hits
Wertung: 137 Punkte (8 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

LinuxUser 05/2014

Aktuelle Ausgabe kaufen:

Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,95 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 60,60) können Sie im Medialinx-Shop bestellen.

Tipp der Woche

Bilder vergleichen mit diffimg
Bilder vergleichen mit diffimg
Tim Schürmann, 01.04.2014 12:40, 1 Kommentare

Das kleine Werkzeug diffimg kann zwei (scheinbar) identische Bilder miteinander vergleichen und die Unterschiede optisch hervorheben. Damit lassen sich nicht nur Rätsel a la „Orignial und Fäls...

Aktuelle Fragen

programm suche
Hans-Joachim Köpke, 13.04.2014 10:43, 8 Antworten
suche noch programme die zu windows gibt, die auch unter linux laufen bzw sich ähneln sozusagen a...
Funknetz (Web-Stick)
Hans-Joachim Köpke, 04.04.2014 07:31, 2 Antworten
Bei Windows7 brauche ich den Stick nur ins USB-Fach schieben dann erkennt Windows7 Automatisch, a...
Ubuntu 13.10 überschreibt immer Windows 8 Bootmanager
Thomas Weiss, 15.03.2014 19:20, 8 Antworten
Hallo Leute, ich hoffe das ich richtig bin. Ich habe einen Dell Insipron 660 Ich möchte gerne Ub...
USB-PTP-Class Kamera wird nicht erkannt (Windows-only)
Wimpy *, 14.03.2014 13:04, 15 Antworten
ich habe meiner Frau eine Digitalkamera, AGFA Optima 103, gekauft und wir sind sehr zufrieden dam...
Treiber
Michael Kristahn, 12.03.2014 08:28, 5 Antworten
Habe mir ein Scanner gebraucht gekauft von Canon CanoScan LiDE 70 kein Treiber wie bekomme ich de...