Home / LinuxUser / 2000 / 10 / Einführung in Tcl/Tk, Teil 4

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

Mandriva gibt Distribution in die Hände der Community
(268 Punkte bei 24 Stimmen)
Neues vom Systemd
(161 Punkte bei 4 Stimmen)
Mandriva in Nöten
(161 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Shopping
Topsuche
 
Yatego Deutschlands größte Shoppingmall. 10000 Shops,
3.5 Mio Artikel. Alle Bestseller, Servertechnik und Technik Themenwelten.

Notebooks und Netzwerkhardware bei Mercateo günstig kaufen.
Internet Telefonie mit VoIP Telefonen von Gigaset
Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.
Günstige Digitalkameras finden Sie im Preisvergleich.

Die Kommandozeile macht sich schön (2)

Einführung in Tcl/Tk, Teil 4

Dateibrowser

Einer der meiner Meinung nach schönsten Tcl/Tk-Befehle ist der zum Aufruf eines Dateimanagers. Das geht ganz einfach mit tk_getOpenFile. Wenn Sie nur bestimmte Dateien angezeigt bekommen möchten, erweitern Sie diesen Befehl um die Option -filetypes und geben danach die Art der anzuzeigenden Dateien und deren Endung an. Dabei sind prinzipiell mehrere Kombinationen aus Dokumentenart und -endung möglich. Daher muss jede einzelne Kombination in extra Klammern zusammen gefasst und alle gemeinsam noch einmal in Klammern eingeschlossen werden. Diese Doppel-Klammer-Technik bleibt Ihnen auch dann nicht erspart, wenn Sie nur eine einzige Dokumentenart-Endung-Kombination angeben.

Im Fall des Povray-Interfaces handelt es sich um Povray-Dokumente mit der Endung .pov. Der komplette Befehl lautet damit:

tk_getOpenFile -filetypes { { Povray-Dokumente .pov } }

Wenn Sie diesen Befehl im Interpreter testen, sieht das Ergebnis aus wie in Abbildung 2 – natürlich mit anderen Verzeichnisnamen und abweichendem Verzeichnisinhalt.

Abbildung 2: Tcl/Tks Dateibrowser

Zurück gibt tk_getOpenFile den Namen der ausgewählten Datei. Wenn Sie den Befehl in eckigen Klammern aufrufen, werden die Klammern nebst Inhalt durch das Ergebnis des Befehls ersetzt. Dieses können Sie dann in der Variablen pov(bild) speichern und in den Namen der Bilddatei umwandeln.

Dazu verwenden Sie wie in Teil zwei dieser Einführung den Befehl file mit dem Argument rootname und einem Dateinamen. Auf diese Art entfernen Sie die Dateiendung und können eine neue Dateinamenserweiterung anhängen (Zeile 20--30):

proc dateiAuswahl { } {
    global pov
    # Oeffnen des Dateibrowsers
    set pov(szene) [ tk_getOpenFile \
        -filetypes { { Povray-Dokumente .pov } }
                    ]
    # Erstellen des Namens für die Bilddatei
    set pov(bild) [ file rootname $pov(szene) ]
    set pov(bild) $pov(bild).tga
}

Damit wäre Ihr Programm fertig. Sie glauben nicht, dass das so schnell ging? Nun, dieses Interface ist noch nicht perfekt, da es hauptsächlich zum Erklären von Tcl/Tk entstand. Es könnte z.B. wie in [8] noch die Möglichkeit bieten, die Geometrie nur auf Wunsch einzustellen, oder zusätzlich einen Button zum Starten des Editors besitzen.

Doch nach der Lektüre dieser Einführung sind Sie sicher in der Lage, alles besser zu machen und povgui Ihren Wünschen entsprechend anzupassen.

Listing 1

povguis Oberfläche

Im Folgenden sehen Sie das Arbeitsergebnis unserer vierteiligen Einführung in Tcl/Tk – ein Progrämmchen mit grafischer Oberfläche, mit dem sich der Raytracer PovRay leichter bedienen lässt. Der Quelltext ist durchnummeriert, um das Abschreiben – ohne Zeilennummern – zu erleichtern; im vierten Teil neu hinzu gekommenen und daher im vorliegenden Artikel beschriebenen Code erkennen Sie am Fettdruck.

1 #!/bin/sh
 2 #\
 3 exec wish "$0"
 4
 5 ########## Variablendefinition ########## 
 6 set pov(szene) "" 
 7 set pov(bild) "" 
 8 set pov(breite) 400 
 9 set pov(hoehe) 200 
10 
11  
12 ########## dateiAuswahl ########## 
13 # Ermittelt den Namen der Szenendatei 
14 # und erstellt daraus den Namen der zu rendernden Datei 
15 # 
16 # Variablen: 
17 # datei(szene): Name der Szenendatei 
18 # datei(bild) : Name der zu rendernden Datei 
19  
20 proc dateiAuswahl { } { 
21  global pov 
22  
23  # Oeffnen des Dateibrowsers 
24  set pov(szene) [ tk_getOpenFile \ 
25  -filetypes { { Povray-Dokumente .pov } } 
26  ]
27  # Erstellen des Namens für die Bilddatei 
28  set pov(bild) [ file rootname $pov(szene) ] 
29  set pov(bild) $pov(bild).tga 
30 } 
31  
32 ########## Fensterelemente ########## 
33
34 # Die Frames, in denen die anderen Widgets angeordnet werden:
35 frame .obererRahmen    -borderwidth 1 -relief raised
36 frame .mittlererRahmen -borderwidth 1 -relief raised
37 frame .untererRahmen   -borderwidth 1 -relief raised
38
39 pack .obererRahmen    -side top -fill x
40 pack .mittlererRahmen -side top -fill x
41 pack .untererRahmen   -side top -fill x
42
43 # Die Buttons in der unteren Zeile:
44 button .renderKnopf  -text Rendern \ 
45       -command { exec povray +I$pov(szene) +O$pov(bild) \ 
46       +W$pov(width) +H$pov(height) & } 
47
48 button .anzeigeKnopf -text Anzeigen \ 
49       -command { exec xv $pov(bild) & } 
50
51 pack .renderKnopf  -in .untererRahmen \
52       -side left -fill x -expand yes
53 pack .anzeigeKnopf -in .untererRahmen \
54       -side left -fill x -expand yes
55
56 # Der Menuebutton mit Menue:
57 menubutton .dateiKnopf -text Datei -menu .dateiKnopf.herunterklappMenue
58
59 menu .dateiKnopf.herunterklappMenue
60 .dateiKnopf.herunterklappMenue add command -label "Szenendatei wählen ..."  \
61       -command dateiAuswahl
62 .dateiKnopf.herunterklappMenue add separator
63 .dateiKnopf.herunterklappMenue add command -label "Beenden" -command exit
64
65 pack .dateiKnopf -in .obererRahmen -side left
66
67 # Die Beschriftung für Eingabefeld und Schieberegler:
68 label .bildnameAufschrift   -text Bildname
69 label .bildbreiteAufschrift -text Bildbreite
70 label .bildhoeheAufschrift  -text Bildhöhe
71
72 # Eingabefeld und Schieberegler:
73 entry .bildnameEingabefeld -width 30 \ 
74       -textvariable pov(bild)
75 scale .bildbreiteScale -from 20 -to 400 -orient horizontal \ 
76       -variable pov(width)
77 scale .bildhoeheScale  -from 20 -to 400 -orient horizontal \ 
78       -variable pov(height)
79
80 # Anordnen der Widgets im mittleren Teil:
81 grid .bildnameAufschrift   -in .mittlererRahmen -row 0 -column 0 -sticky sw
82 grid .bildbreiteAufschrift -in .mittlererRahmen -row 1 -column 0 -sticky sw
83 grid .bildhoeheAufschrift  -in .mittlererRahmen -row 2 -column 0 -sticky sw
84 grid .bildnameEingabefeld  -in .mittlererRahmen -row 0 -column 1 -sticky we
85 grid .bildbreiteScale      -in .mittlererRahmen -row 1 -column 1 -sticky we
86 grid .bildhoeheScale       -in .mittlererRahmen -row 2 -column 1 -sticky we
87
88 # Aendern des Fenstertitels:
89 wm title . "povgui"

Glossar

Povray

Ein Bilderzeugungsprogramm, das aus mathematischen Daten Bilder berechnet ("rendert"). Die Oberflächenfarbe der Objekte einer Szene ermittelt es durch Zurückverfolgen der auftreffenden Lichtstrahlen (daher Raytracer – "Strahlenverfolger").

Interpreter

Eine der Möglichkeiten, dem Rechner Quelltexte (also von Programmiererinnen geschriebenen Programmcode) verständlich zu machen. Der Interpreter nimmt sich des Quellcodes an und übersetzt ihn während der Programmausführung für den Computer. Der Interpreter der Skriptsprache Tcl heißt tclsh. Will man zudem Tk, die passende Bibliothek zum Erzeugen der Fensterelementen, nutzen, benötigt man an seiner Stelle die "Windowing Shell" wish.

Widgets

Abgeleitet von "window" und "gadget" ("Dingsbums") bezeichnet der Begriff Widget Fensterelemente wie z.B. Buttons, Schieberegler und Eingabefelder.

\

Da ein Zeilenumbruch in Tcl/Tk immer auch ein Befehlsende ist, muss ein Zeilenwechsel innerhalb eines Befehls maskiert werden. Dies geschieht durch einen Backslash (\). Nach diesem darf allerdings außer der Enter-Taste kein Zeichen mehr eingetippt werden – auch ein Leerzeichen führt zu einer Fehlermeldung.

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/home.html

[4] John Ousterhout, der "Erfinder" von Tcl/Tk, hat selbst ein sehr lesenswertes Buch 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

[] Der erste Teil dieser Programmiereinführung ist erschienen im: [7a] Linux-Magazin 04/2000, S. 120--124 und online abrufbar unter: [7b] 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

[9] Linux-Magazin 08/2000, S. 116--122

[10] Linux-User 08/2000, S. 30--36

Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

Hits
Wertung: 0 Punkte (2 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

LinuxUser 06/2012

Aktuelle Ausgabe kaufen:

Heft bestellen Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,50 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 56,10) können Sie im LNM-Shop bestellen.

Tipp der Woche

Adobe AIR
Adobe-AIR-Programme installieren und (manuell) starten
Tim Schürmann, 14.05.2012 13:09, 0 Kommentare

Es gibt sie noch: neue Anwendungen, die Adobes Integrated Runtime voraussetzen. Aktuellstes und vermutlich auch größtes Beispiel ist das Adventure Botanicula

Aktuelle Fragen

gibt es ein Kommandozeilen Tool, um ein X11-Fenster in ein Anderes einzubetten?
GoaSkin , 21.05.2012 16:44, 0 Antworten
Das XEmbed-Protokoll ist u.A. dazu gedacht, dass man eine X11-Anwendung in eine andere wie ein Wi...
Apache2, Options -Indexes geht nicht
no no, 12.05.2012 19:01, 8 Antworten
Habe in apache2.conf folgendes stehen: Options -Indexes ...
LInux auf Dell LS H500
Andreas Endresl, 09.05.2012 08:54, 2 Antworten
Habe einen alten Dell Latitude LS H500 nur mit ext. Floppy und CD es geht nur immer eines von den...
Datenwiederherstellung unter Ubuntu 12.04 mit "Simple Backup" nach Umzug von Linux Mint
Christian Lottmann, 07.05.2012 13:33, 0 Antworten
Vor dem Umzug auf Ubuntu 12.04 habe ich unter Linux MInt mit "Simple Backup" voll (15.4.2012) und...
DKMS für den propritären NVIDIA-Treiber
Commander Data, 26.04.2012 22:02, 2 Antworten
Hallo an die Gemeinde. Ich habe hier ein interessantes Stück openSuSE gefunden. http://forums.op...