Table Of ContentSandini Bib
Effektiv Tcl/Tk programmieren
Sandini Bib
Professionelle Programmierung
Sandini Bib
Mark Harrison, Michael McLennan
Effektiv Tcl/Tk
programmieren
Deutsche Übersetzung von Birgit Krehl, Ralf Lübeck, Arnulf Mester,
Dorothea Reder, Michael Sczittnick, Dirk Steinkamp
An imprint of Addison Wesley Longman, Inc.
Bonn • Reading, Massachusetts (cid:127) Menlo Park, California
New York (cid:127) Harlow, England (cid:127) Don Mills, Ontario
Sydney (cid:127) Mexico City (cid:127) Madrid (cid:127) Amsterdam
Sandini Bib
Die Deutsche Bibliothek – CIP-Einheitsaufnahme
Harrison, Mark:
Effektiv Tcl, Tk programmieren / Mark Harrison ; Michael McLennan. –
Bonn ; Reading, Massachusetts [u.a.] :
Addison-Wesley-Longman, 1998
ISBN 3-8273-1409-7
© 1998 Addison Wesley Longman Verlag GmbH, 1. Auflage 1998
Die amerikanische Originalausgabe trägt den Titel:
Effective Tcl/Tk Programming. Writing Better Programs with Tcl and Tk.
ISBN 0-201-63474-0
© 1998 Lucent Technologies,
© veröffentlicht von Addison-Wesley Publishing Company
Übersetzung: Birgit Krehl, Ralf Lübeck, Arnulf Mester, Dorothea Reder,
Michael Sczittnick, DirkSteinkamp
Lektorat: Susanne Spitzer und Annette Baumhof, München
Satz: Reemers EDV-Satz, Krefeld. Gesetzt aus der Palatino 9,5 Punkt
Belichtung, Druck und Bindung: Kösel GmbH, Kempten
Produktion: TYPisch Müller, München
Umschlaggestaltung: vierviertel gestaltung, Köln
Das verwendete Papier ist aus chlorfrei gebleichten Rohstoffen hergestellt und alterungsbeständig. Die
Produktion erfolgt mit Hilfe umweltschonender Technologien und unter strengsten Auflagen in einem
geschlossenen Wasserkreislauf unter Wiederverwertung unbedruckter, zurückgeführter Papiere.
Text, Abbildungen und Programme wurden mit größter Sorgfalt erarbeitet. Verlag, Übersetzer und
Autoren können jedoch für eventuell verbliebene fehlerhafte Angaben und deren Folgen weder eine juri-
stische Verantwortung noch irgendeine Haftung übernehmen.
Die vorliegende Publikation ist urheberrechtlich geschützt. Alle Rechte vorbehalten. Kein Teil dieses
Buches darf ohne schriftliche Genehmigung des Verlages in irgendeiner Form durch Fotokopie, Mikro-
film oder andere Verfahren reproduziert oder in eine für Maschinen, insbesondere Datenverarbeitungs-
anlagen, verwendbare Sprache übertragen werden. Auch die Rechte der Wiedergabe durch Vortrag,
Funk und Fernsehen sind vorbehalten.
Die in diesem Buch erwähnten Software- und Hardwarebezeichnungen sind in den meisten Fällen auch
eingetragene Markenzeichen und unterliegen als solche den gesetzlichen Bestimmungen.
Sandini Bib
Für Maria, Maxwell und Katie
– Michael McLennan
Für Ellen, Allegra und Alexander
– Mark Harrison
Die dem Ganzen einen Sinn geben
Sandini Bib
Sandini Bib
Inhalt
Vorwort XIII
E Danksagungen XV
1 Tcl/Tk-Anwendungen entwerfen 1
1.1 Entwurfsprozeß von Anwendungen 1
1.2 Eine kleine Anwendung 3
1.2.1 Entwurf der Anwendung 3
1.2.2 Entwurf des Bildschirms 5
1.2.3 Ein Prototyp des Bildschirms 6
1.2.4 Bibliotheksanalyse 7
1.2.5 Hinzufügen von Verhalten 9
1.2.6 Feinschliff durchführen 11
1.2.7 Testen des Programms 13
1.2.8 Ein Programm verpacken 15
2 Packen, an einem Raster Ausrichten undPlazieren 17
2.1 Die Verwendung des Befehls pack 18
2.1.1 Ein Hohlraum als Modellvorstellung 18
2.1.2 Packoptionen 21
2.1.3 Packreihenfolge 22
2.1.4 Hierarchisches Packen 23
2.1.5 Fenster komprimieren 26
2.1.6 Vergrößern von Fenstern 28
2.1.7 Widgets entpacken 32
2.2 Verwendung des grid-Befehls 40
2.2.1 Ausrichten an einem Raster als Modellvorstellung 40
2.2.2 Rasteroptionen 42
2.2.3 Größenanpassung von Fenstern 45
2.2.4 Mischen von grid und pack 47
2.3 Verwendung des place-Befehls 50
2.3.1 Das koordinatenbasierte Modell 50
2.3.2 Eigene Geometriemanager 52
Sandini Bib
VIII Inhalt
3 Ereignisbehandlung 59
3.1 Die Ereignisschleife 59
3.1.1 Tastatur-Eingabefokus 61
3.1.2 Aktualisierungen erzwingen 62
3.1.3 Behandlung von Anbindungen mit langer Ausführungszeit 64
3.1.4 Gültigkeitsbereich der Programmausführung 71
3.1.5 Anführungszeichen und die Ereignisschleife 71
3.2 Einfache Beispiele für die Verwendung von bind 74
3.2.1 Auswahl eines Elements aus einer Listbox 74
3.2.2 Automatische Hilfe bei Schaltflächen 75
3.2.3 Anbindungen an Klassen 76
3.3 Die Syntax des Befehls bind 77
3.3.1 Die Ereignisspezifikation 77
3.3.2 Ersetzungen bei Prozentzeichen-Ausdrücken 85
3.4 Komplexere Ereignisse 86
3.4.1 Klicken, Ziehen und Loslassen 86
3.4.2 Anpassung des Verhaltens von Widgets 91
3.5 Anbindungstags 95
3.5.1 Voreingestellte Anbindungstags 97
3.5.2 Unterbrechen der Ereignisbehandlung durch break 98
3.5.3 Anbindungstags für Gruppenanbindungen erfinden 99
3.5.4 Anbindungen an ein Toplevel-Fenster 102
3.6 Fehlersuche bei Anbindungen 104
3.6.1 Anbindungen anzeigen 104
3.6.2 Überwachen von Ereignissen 105
3.7 Animation 107
3.7.1 Animation von Elementen auf der Zeichenfläche 108
3.7.2 Fehlersuche bei after-Ereignissen 110
3.7.3 Bibliotheksprozeduren zur Animation 112
4 Die Benutzung des Canvas-Widget 117
4.1 Grundlegendes über das Canvas-Widget 118
4.1.1 Der sichtbare Bereich 121
4.1.2 Modell der Darstellungsliste 123
4.1.3 Die Benutzung von Tags 125
4.1.4 Canvas-Anbindungen 127
4.2 Formulare mit Schiebebalken 130
4.3 Eine Fortschrittsanzeige 135
4.4 HSB-Farbeditor 138
4.5 Notizbuch mit Register 146
4.6 Ein Kalender 154
4.6.1 Die Behandlung von Größenänderungen 155
4.6.2 Sensoren und Callbacks 162
4.6.3 Das Beobachten von Variablen 167
Sandini Bib
Inhalt IX
4.7 Ein einfaches Zeichenpaket 171
4.7.1 Das Zeichnen von Objekten 173
4.7.2 Das Auswählen von Objekten 175
4.7.3 Bewegen und Löschen von Objekten 180
4.7.4 Die Konfiguration von Objekten 181
4.7.5 Größenänderungen von Objekten 183
4.7.6 Eingabe von Text 185
4.7.7 Das Drucken einer Zeichnung 189
4.7.8 Das Speichern einer Zeichnung 191
4.7.9 Das Laden einer Zeichnung 196
5 Verwendung des Text-Widget 199
5.1 Das Text-Widget verstehen 200
5.1.1 Indexmodell 201
5.1.2 Verschieben 204
5.1.3 Verwendung von Markierungen 205
5.1.4 Textanbindungen 209
5.1.5 Verwendung von Marken 212
5.1.6 Modi für den Zeilenumbruch 213
5.1.7 Tabulatoren 215
5.2 Ein einfacher Texteditor 216
5.3 Schreibgeschützte Textanzeige 219
5.4 Termineditor 224
5.4.1 Mit Markierungen Formate zuweisen 225
5.4.2 Eingebettete Fenster 232
5.4.3 Anbindungen an den Text ändern 234
5.4.4 Termine ermitteln 237
5.5 Ein hierarchischer Browser 239
5.5.1 Hierarchische Daten 240
5.5.2 Einen hierarchischen Browser erzeugen 245
5.5.3 Verwendung von Markierungen und Marken 248
6 Toplevel-Fenster 255
6.1 Toplevel-Widget 256
6.2 Das Setzen der Widget-Klasse 257
6.3 Kommunikation mit dem Fenstermanager 258
6.3.1 Fensterplazierung 259
6.3.2 Die Fenstergröße 260
6.4 Einfache Dialoge 261
6.5 Modale Dialoge 265
6.6 Steuern des Zugriffs auf Dialoge 270
6.6.1 Erzeugen/Auflösen-Strategie 270
6.6.2 Hilfe vom Fenstermanager 272
6.6.3 Zeigen/Verbergen-Strategie 274
Sandini Bib
X Inhalt
6.7 Nicht gemanagte Fenster 279
6.7.1 Begrüßungsfenster 279
6.7.2 Sprechblasenhilfe 281
7 Die Interaktion mit anderen Programmen 287
7.1 Die Ausführung anderer Programme 287
7.1.1 Ausführungspipelines 290
7.1.2 Das Erstellen von Befehlen und die Behandlung von Fehlern 290
7.2 Ausgaben von langlebigen Programmen sammeln 293
7.3 Steuerung von Programmen ohne temporäre Dateien 296
7.4 Vermeiden von Pufferproblemen 298
7.4.1 Erkennen des Problems 298
7.4.2 Lösung des Problems 300
7.5 Bidirektionale Pipeline 302
7.5.1 Pufferprobleme 302
7.5.2 Schreiben und Lesen 303
7.5.3 Graphische Schnittstelle 304
7.6 Client-/Server-Architekturen 305
7.6.1 Vorteile 306
7.6.2 Nachteile 307
7.6.3 Ein einfacher Server 308
7.6.4 Ein einfacher Client 310
7.6.5 Geschicktere Befehlsanalyse 312
7.6.6 Sicherere Befehlsanalyse 313
7.6.7 Asynchrone Kommunikation 319
7.6.8 Die Behandlung von Anfragen, die mehrere Zeilen umfassen 330
7.7 Netzwerkprogrammierung mit Sockets 332
7.7.1 Übersicht 333
7.7.2 Ein Netzwerk-Server 334
7.7.3 Ein Netzwerk-Client 336
7.8 Eine Fallstudie – die Elektrische Sekretärin 338
7.8.1 Termine vom Server herunterladen 340
7.8.2 Dem Server einen Termin übermitteln 341
7.8.3 Behandlung von Terminkollisionen 342
7.8.4 Vorlieben 344
7.8.5 Dauerhafte Speicherung 345
7.8.6 Zusammenfassung 346
8 Marktreife Tcl/Tk-Anwendungen 347
8.1 Anwendungen auf Hochglanz bringen 348
8.1.1 Der Umgang mit Widgetressourcen 348
8.1.2 Umgang mit unerwarteten Fehlern 355
8.1.3 Animierte Startseite 359
8.2 Erzeugen von Tcl/Tk-Bibliotheken 362