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

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • Einführung in Tcl/Tk, Teil 4
    In der vierten und letzten Folge dieser Tcl/Tk-Einführung fügen wir der in Teil drei entstandenen Steuerungsoberfläche für Povray Funktionalität hinzu und erwecken sie so zum Leben.
  • Einführung in Tcl/Tk, Teil 1
    Die Kommandozeile hat unbestritten ihre Vorteile. Doch manche Aufgaben lassen sich einfacher mit einer grafischen Benutzeroberfläche erledigen. Tcl/Tk ist ein wunderbares Tool, mit dem sich ohne großen Aufwand grafische Benutzeroberflächen erstellen lassen. Im ersten Teil dieser Einführung lernen Sie, wie man Buttons erstellt und mit ihrer Hilfe Befehle ausführt.
  • Einführung in Tcl/Tk, Teil 2
    Nachdem Sie im ersten Teil dieses Programmierkurses einen ersten Einblick in den Umgang mit Tcl/Tk gewinnen konnten, werden Sie diesmal tiefer in die Strukturen von Tcl eintauchen. Die dabei gewonnenen Fähigkeiten können Sie dazu verwenden, Kommandozeilenprogrammen eine intuitivere, auf Ihre persönlichen Bedürfnisse zugeschnittene Benutzerschnittstelle zu spendieren.
Kommentare

Infos zur Publikation

title_2014_09

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

Videoüberwachung mit Zoneminder
Heinz Becker, 10.08.2014 17:57, 0 Antworten
Hallo, ich habe den ZONEMINDER erfolgreich installiert. Das Bild erscheint jedoch nicht,...
internes Wlan und USB-Wlan-Srick
Gerhard Blobner, 04.08.2014 15:20, 2 Antworten
Hallo Linux-Forum: ich bin ein neuer Linux-User (ca. 25 Jahre Windows) und bin von WIN 8 auf Mint...
Server antwortet mit falschem Namen
oin notna, 21.07.2014 19:13, 1 Antworten
Hallo liebe Community, Ich habe mit Apache einen Server aufgesetzt. Soweit, so gut. Im Heimnet...
o2 surfstick software für ubuntu?
daniel soltek, 15.07.2014 18:27, 1 Antworten
hallo zusammen, habe mir einen o2 surfstick huawei bestellt und gerade festgestellt, das der nic...
Öhm - wozu Benutzername, wenn man dann hier mit Klarnamen angezeigt wird?
Thomas Kallay, 03.07.2014 20:30, 1 Antworten
Hallo Team von Linux-Community, kleine Zwischenfrage: warum muß man beim Registrieren einen Us...