15
John K . Ousterhou t Tcl und Tk 'Entwicklung grafischer Beititzersdinittstelle n für das X Window System ,' I, 2 . - v

Tcl und Tk - GBVTcl und Tk 'Entwicklung grafischer Beititzersdinittstellen für das X Window System ,' I, 2 . - v Anmerkungen zur Übersetzung xxi Vorwort xxv 1 Einführung 1 1.1 Einführung

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Tcl und Tk - GBVTcl und Tk 'Entwicklung grafischer Beititzersdinittstellen für das X Window System ,' I, 2 . - v Anmerkungen zur Übersetzung xxi Vorwort xxv 1 Einführung 1 1.1 Einführung

John K. Ousterhout

Tcl und Tk

'Entwicklung grafischer Beititzersdinittstelle nfür das X Window System ,'

I, 2 . - v

Page 2: Tcl und Tk - GBVTcl und Tk 'Entwicklung grafischer Beititzersdinittstellen für das X Window System ,' I, 2 . - v Anmerkungen zur Übersetzung xxi Vorwort xxv 1 Einführung 1 1.1 Einführung
Page 3: Tcl und Tk - GBVTcl und Tk 'Entwicklung grafischer Beititzersdinittstellen für das X Window System ,' I, 2 . - v Anmerkungen zur Übersetzung xxi Vorwort xxv 1 Einführung 1 1.1 Einführung

Anmerkungen zur Übersetzung

xxi

Vorwort

xxv

1 Einführung

1

1.1 Einführung 1

1 .2 Gliederung des Buchs 4

1.3 Notation 5

1 .4 Aussprache 6

1 .5 Versionen 6

2 Ein Überblick über Tcl und Tk

7

2.1 Die ersten Gehversuche 7

2.2 „Hello world" mit Tk 9

2.3 Skriptdateien 1 1

2.4 Variablen und Substitutionen 1 3

2.5 Kontrollstrukturen 14

2.6 Ein paar Worte zu Tcls Grammatik 16

2.7 Event-Bindings 18

2.8 Prozeßausführung 20

2.9 Weitere Eigenschaften von Tcl und Tk 23

Page 4: Tcl und Tk - GBVTcl und Tk 'Entwicklung grafischer Beititzersdinittstellen für das X Window System ,' I, 2 . - v Anmerkungen zur Übersetzung xxi Vorwort xxv 1 Einführung 1 1.1 Einführung

2.10 Bestehende Erweiterungen und Applikationen 24

2.10 .1 expect 24

2.10 .2 Extended Tcl 25

2.10.3 XF 26

2.10 .4 Verteilte Programmierung 27

2.10.5 Ak 28

I Die Skriptsprache Tcl

31

Tcls Sprachsyntax

33

3.1 Skripte, Befehle und lexikalische Einheiten 33

3.2 Ausführung von Befehlen 34

3.3 Variablenersetzung 36

3.4 Befehlsersetzung 37

3.5 Backslash-Substitution 38

3 .6 Quoting mit Anführungszeichen 39

3.7 Quoting durch geschweifte Klammern 40

3.8 Kommentare 43

3.9 Normale Befehlsausführung, Ausnahmezustände 43

3.10 Mehr über Substitutionen 44

4 Variablen

47

4.1 Erzeugung einfacher Variablen 47

4.2 Arrays 4 9

4.3 Variablenersetzung 4 9

4.4 Variablen mit unset löschen 5 1

4.5 Mehrdimensionale Arrays 5 1

4.6 Die Befehle incr und append 52

4.7 Vordefinierte Variablen 53

4.8 Vorgeschmack auf weitere Variablenoperationen 53

5 Ausdrücke

55

5.1 Numerische Operanden 55

5.2 Operatoren und Operatorpräzedenzen 56

Page 5: Tcl und Tk - GBVTcl und Tk 'Entwicklung grafischer Beititzersdinittstellen für das X Window System ,' I, 2 . - v Anmerkungen zur Übersetzung xxi Vorwort xxv 1 Einführung 1 1.1 Einführung

5.2 .1 Arithmetische Operatoren 56

5 .2 .2 Vergleichsoperatoren 57

5 .2 .3 Logische Operatoren 58

5 .2 .4 Operationen auf Bitebene 58

5 .2 .5 Bedingungsoperator 59

5.3 Mathematische Funktionen 59

5.4 Ersetzungen 59

5.5 Strings als Operanden 6 1

5.6 Typen und Typumwandlungen 61

5.7 Zahlenrepräsentation 62

6 Listen

6 3

6.1 Einfache Listen und der Befehl lindex 6 3

6 .2 Listengenerierung : concat und list, llength 6 6

63 Modifikation von Listen : linsert,lreplace, lrange und lappend 67

6.4 Listen mit Isearch durchsuchen 6 8

6 .5 Listen mit lsort sortieren 6 9

6 .6 Umwandlungen zwischen Strings und Listen 6 9

6 .7 Listen und Tcl-Befehle 70

7 Kontrollstrukturen

73

7.1 Der Befehl if 73

7.2 Schleifen mit while, for und foreach realisieren 75

7.3 Die Befehle break und continue 77

7.4 Der Befehl switch 78

7.5 Der Befehl eval 79

7.6 Skriptdateien mit source ausführen 8 1

8 Prozeduren und Variablenkontexte

8 3

8.1 Die zentralen Befehle proc und return 8 3

8 .2 Globale und Lokale Variablen 8 6

8 .3 Defaultwerte und Argumente in veränderlicher Anzahl 8 7

8 .4 Call by Reference mit upvar 8 9

8 .5 Implementierung neuer Kontrollstrukturen mit uplevel 90

Page 6: Tcl und Tk - GBVTcl und Tk 'Entwicklung grafischer Beititzersdinittstellen für das X Window System ,' I, 2 . - v Anmerkungen zur Übersetzung xxi Vorwort xxv 1 Einführung 1 1.1 Einführung

9 Stringverarbeitung

9 3

9 .1 Ein paar Worte über Zeichensätze vorweg 93

9.2 Mustererkennung nach den glob-style-Regeln 9 5

9 .3 Mustererkennung über reguläre Ausdrücke 9 7

9 .4 Substitutionen über reguläre Ausdrücke 100

9.5 Formatierte Ausgaben mit dem Befehl format 10 1

9 .6 Stringanalyse mit dem Befehl scan 103

9.7 Die Befehle string index und string range 104

9 .8 Stringsuche und -vergleich 105

9 .9 Stringlängen, Groß-/Kleinschreibung und „Trimming" 105

10 Die Arbeit mit Dateien

107

10.1 Dateinamen 10 7

10 .2 Grundlegende Ein-/Ausgabeoperationen 109

10.3 Ausgabepufferung 11 1

10 .4 Wahlfreier Zugriff auf Dateien 112

10 .5 Das aktuelle Arbeitsverzeichnis 113

10 .6 Manipulation von Dateinamen : glob und file 113

10 .7 Systeminformationen über Dateien 11 7

10 .8 Fehler in Systemaufrufen 118

11 Prozesse

121

11.1 Prozeßerzeugung via exec 12 1

11 .2 Ein- und Ausgabe über Pipelines 125

11.3 Prozeßkennungen 126

11.4 Umgebungsvariablen 126

11.5 Tcl mit exit beenden 126

12 Fehler- und Ausnahmezustände

127

12.1 Der Zustand nach einem Fehler 127

12 .2 Fehlererzeugung in Tcl-Skripten 130

12.3 catch: Fehlerbehandlung leicht gemacht 130

12.4 Ausnahmezustände 131

Page 7: Tcl und Tk - GBVTcl und Tk 'Entwicklung grafischer Beititzersdinittstellen für das X Window System ,' I, 2 . - v Anmerkungen zur Übersetzung xxi Vorwort xxv 1 Einführung 1 1.1 Einführung

13 Hinter den Kulissen von Tcl

13 5

13.1 Die Elemente eines Arrays 13 5

13 .2 Informationen aus dem Interpreter : info 13 9

13 .2 .1 Informationen über Variablen 13 9

13 .2 .2 Informationen über Prozeduren 14 0

13 .2 .3 Informationen über Befehle 14 2

13 .2.4 Die Unterfunktionen tclversion und library 14 3

13 .3 Ein Maß für die Performance : time 14 3

13 .4 Zugriffskontrollen für Variablen : Tracing 14 4

13 .5 Befehle umbenennen und löschen 14 7

13.6 unknown : Dem Unbekannten eine Chance 14 8

13.7 Die Technik des Autoloadings 150

14 History: Das Ding mit der Vergangenheit

153

14 .1 Die History-Liste, eine Chronik 153

14.2 Die Angabe von Ereignissen 155

14 .3 Anweisungen aus der Vergangenheit wiederholen 155

14 .4 Durch unknown verfügbare Abkürzungen 156

14.5 Die Kennung für das nächste Ereignis : history nextid 157

II Tks Erweiterungen zu Tcl

159

15 Eine Einführung in Tk

16 1

15 .1 Eine kurze Einführung in X 16 1

15.2 Widgets 16 4

15 .3 Applikationen, Top-Level Widgets und Screens 16 5

15 .4 Tcl-Skripte und Event-Handler 16 8

15 .5 Widgets erzeugen und entfernen 16 8

15 .6 Geometry-Manager 16 9

15 .7 Widget-Befehle 17 0

15 .8 Kommunikation zwischen Widgets und Applikationen 171

Page 8: Tcl und Tk - GBVTcl und Tk 'Entwicklung grafischer Beititzersdinittstellen für das X Window System ,' I, 2 . - v Anmerkungen zur Übersetzung xxi Vorwort xxv 1 Einführung 1 1.1 Einführung

16 Tks Widgets im Schnelldurchlauf

17 3

16.1 Frames 174

16 .1 .1 Reliefs 174

16 .1 .2 Maßangaben 17 5

16 .1 .3 Farbangaben 17 6

16 .1 .4 Synonyme 177

16 .2 Die Widget-Klasse Toplevel 177

16.3 Label-Widgets 177

16 .3 .1 Angabe von Texten 177

16 .3 .2 Font-Spezifikationen 179

16 .3.3 Die Angabe von Bitmaps 180

16.4 Buttons, Checkbuttons und Radiobuttons 18 1

16 .5 Message-Widgets 18 3

16 .6 Listbox-Widgets 184

16.7 Scrollbars 18 5

16 .8 Scale-Widgets 187

16.9 Entries 189

16 .10 Widgets der Klassen Menu und Menubutton 190

16.10.1 Pull-Down-Menüs 19 1

16 .10 .2 Untermenüs 193

16 .10 .3 Keyboard-Traversal und Tastenkürzel 193

16 .11 Weitere weitverbreitete Widget-Ressourcen 196

16.11 .1 Cursor-Ressourcen 196

16.11 .2 Die Ressource -anchor 197

17 Der Packer, ein Geometry-Manager

199

17 .1 Grundlagen des Geometry-Managements 200

17 .2 Grundlagen des Packers 204

17.3 Der Befehl pack und seine Option -side 205

17 .4 Padding 207

17.5 Die Option -fill 208

17 .6 Expansionen 208

17.7 Die Ausrichtung von Widgets 211

Page 9: Tcl und Tk - GBVTcl und Tk 'Entwicklung grafischer Beititzersdinittstellen für das X Window System ,' I, 2 . - v Anmerkungen zur Übersetzung xxi Vorwort xxv 1 Einführung 1 1.1 Einführung

17.8 Die Packreihenfolge 21 1

17.9 Layoutgestaltung hierarchischer Widgets 212

17.10 Weitere Funktionen des Packers 214

17.11 Weitere Geometry-Manager Tks 21 5

18 Event-Bindings

217

18.1 X-Events 217

18.2 Ein Überblick über den Befehl bind 21 9

18 .3 Event-Spezifikationen 22 0

18 .4 Event-Sequenzen 222

18 .5 Substitutionen während der Event-Verarbeitung 223

18.6 Was passiert bei mehreren Bindings für einen Event? 224

18.7 Der Zeitpunkt der Bearbeitung von Events 226

18.8 Die Behandlung von Background-Errors 226

18 .9 Weitere Event-Bindings 227

19 Canvas- und Text-Widgets

229

19 .1 Grundlagen des Canvas-Widgets 229

19.2 Die Manipulation einzelner Objekte 232

19.3 Bindings 233

19 .4 Weitere Eigenschaften der Canvas-Widgets 237

19 .5 Text-Widgets 237

19 .6 Indizes und Marken 238

19 .7 Markierungen von ganzen Textausschnitten 24 1

20 Die Selektion

245

20.1 Abfrage der Selektion unter verschiedenen Aspekten 245

20.2 Auffinden und Löschen der Selektion 247

20.3 Bereitstellen der Selektion Ober Tcl-Skripte 248

21 Die Eingabefokussierung

251

21 .1 Die zwei Modelle der Fokussierung 25 1

21 .2 Das Setzen der Fokussierung 25 3

21 .3 Zurücksetzen der Eingabefokussierung 25 3

21 .4 Voreinstellung der Fokussierung 25 4

21 .5 Tastaturkürzel 254

Page 10: Tcl und Tk - GBVTcl und Tk 'Entwicklung grafischer Beititzersdinittstellen für das X Window System ,' I, 2 . - v Anmerkungen zur Übersetzung xxi Vorwort xxv 1 Einführung 1 1.1 Einführung

22 Window-Manager

255

22.1 Fenstergrößen 25 8

22.2 Rasterungen 26 0

22 .3 Fensterpositionen 26 2

22 .4 Zustände eines Fensters 26 2

22 .5 Dekorative Elemente 26 3

22 .6 Nachrichten vom Window-Manager 26 4

22 .7 Sonderbehandlungen durch den Window-Manager 264

22.8 Session-Management 265

22.9 Eine Warnung im Zusammenhang mit Window-Managern 26 6

23 Kommunizierende Applikationen

267

23.1 Grundlagen 267

23.2 Hypertools 26 9

23.3 Applikationsnamen 26 9

23 .4 Sicherheitsaspekte 270

24 Modale Interaktionen

273

24.1 Grabs 274

24.2 Tastatureingaben während eines Grabs 276

24.3 Mit tkwait auf Ereignisse warten 276

25 Widget-Konfiguration für Fortgeschrittene

279

25.1 Die Ressource-Datenbank 279

25.2 Eintragungen in die Datenbank 28 1

25.3 Der Ressource-Manager und die Datei .Xdefaults 28 2

25.4 Prioritäten innerhalb der Ressource-Datenbank 28 3

25.5 Der Befehl option 28 4

25.6 Die Funktion configure der Widget-Befehle 285

26 Vermischtes

287

26.1 Das Löschen von Widgets 287

26.2 Timing 289

26.3 Der Befehl update 289

Page 11: Tcl und Tk - GBVTcl und Tk 'Entwicklung grafischer Beititzersdinittstellen für das X Window System ,' I, 2 . - v Anmerkungen zur Übersetzung xxi Vorwort xxv 1 Einführung 1 1.1 Einführung

26.4 Informationen über Widgets 29 1

26.5 Die Befehle raise und lower 29 126.6 Der Befehl tk 29 2

26.7 Von Tk verwaltete Variablen 29 3

27 Beispiele

29 5

27.1 Eine Prozedur zur Erzeugung von Dialogfenstern 29 5

27.2 Eine „Fernsteuerung" für Tk-Applikationen 300

III Tcl-Applikationen und C

307

28 Einführung in die Philosophie von Tcls C-Schnittstelle

309

28.1 Die Wahl der Mittel : Tcl gegen C 31 1

28.2 Objektbezeichnungen 31328.3 Die Wahl der Implementierung : funktions- gegen objektorientiert

314

28.4 Die Repräsentation von Informationen 31 5

29 Tcl-Interpreter und Skript-Evaluierungen

317

29.1 Interpreter 317

29.2 Eine einfache Tcl-Applikation 31 8

29.3 Weitere Funktionen zur Evaluierung 32 0

29 .4 Löschen von Interpretern 322

30 Neue Tcl-Befehle

323

30.1 Befehlsprozeduren 323

30 .2 Die Registrierung neuer Befehle 32530.3 Das Rückgabeprotokoll 327

30.4 Funktionen zum Umgang mit dem Rückgabeprotokoll 329

30.5 ClientData und Callback-Prozeduren 33 1

30.6 Das Löschen von Befehlen 333

30.7 Die Implementierung der Prozeduren in Tcl 335

Page 12: Tcl und Tk - GBVTcl und Tk 'Entwicklung grafischer Beititzersdinittstellen für das X Window System ,' I, 2 . - v Anmerkungen zur Übersetzung xxi Vorwort xxv 1 Einführung 1 1.1 Einführung

31 Erweiterungspakete zu Tcl

33 7

31 .1 Tcl_Applnit 337

31 .2 Erweiterungspakete für Tcl 34 1

31 .2 .1 Präfixe für Erweiterungspakete 34 1

31.2 .2 Initialisierung eines Erweiterungspaketes 34 2

31 .2 .3 Unterstützung mehrerer Interpreter 34 4

32 Parsing

347

32.1 Zahlen und Boolesche Werte 347

32.2 Auswertung von Ausdrücken 35 0

32.3 Manipulation von Listen 35 1

33 Ausnahmezustände

35 3

33.1 Rückgabewerte 35 3

33 .2 Aufbau eines Stack-Trace in errorlnfo 35 6

33 .3 Das Setzen von errorCode 35 8

34 Zugriff auf Tcl-Variablen

36 1

34.1 Referenzierung von Tcl- Variablen 36 1

34 .2 Variablen setzen 36 4

34 .3 Variablen auslesen 36 6

34 .4 Variablen löschen 367

34.5 Links zwischen C- und Tcl-Variablen 36 8

34 .6 Variablen-Traces 36 9

34.7 Trace-Callbacks 370

34.8 Array-Traces 372

34.9 Mehrfache Traces 373

34.10 Callbacks aufgrund von unset 373

34.11 Variablen, die noch nicht existieren 374

34.12 Informationen über Traces 374

35 Hash-Tables

377

35.1 Zugriffsschlüssel und Werte 379

35.2 Hash-Tables anlegen und entfernen 380

Page 13: Tcl und Tk - GBVTcl und Tk 'Entwicklung grafischer Beititzersdinittstellen für das X Window System ,' I, 2 . - v Anmerkungen zur Übersetzung xxi Vorwort xxv 1 Einführung 1 1.1 Einführung

35.3 Einträge erzeugen 381

35.4 Auffinden von Einträgen 382

35.5 Hash-Tables durchsuchen 383

35.6 Einträge löschen 384

35.7 Statistische Daten 385

36 Stringverarbeitung

387

36.1 Dynamische Strings 387

36.2 Vollständigkeit von Anweisungen 39 1

36.3 Stringvergleiche 392

37 POSIX-Unterstützung

395

37.1 Tilde-Notation 395

37.2 Erzeugung von POSIX-Meldungen 397

37.3 Erzeugung von Prozessen 39 9

37.4 Hintergrundprozesse 40 0

IV Tks C-Schnittstelle

403

38 Einführung

405

38.1 Woraus besteht ein Widget? 406

38 .2 Der Zusammenhang zwischen Tk und Xlib 408

38.3 Square : eine neue Widget-Klasse 409

38.4 tk.h 41 1

38.5 Design wiederverwertbarer Widgets 41 1

39 Erzeugung von Fenstern

413

39.1 Die Datentypen Window und Tk_Window 413

39.2 Die Generierung eines Tk_Windows 415

39.3 Festlegung der Klassenzugehörigkeit 416

39.4 Das Entfernen von Fenstern 417

39.5 Grundlegende Operationen mit einem Tk_Window 417

39.6 Klassenkonstruktoren 42 0

39.7 Die Initialisierung als Erweiterungspaket 42 2

39.8 Verzögerte Erzeugung von Fenstern 423

Page 14: Tcl und Tk - GBVTcl und Tk 'Entwicklung grafischer Beititzersdinittstellen für das X Window System ,' I, 2 . - v Anmerkungen zur Übersetzung xxi Vorwort xxv 1 Einführung 1 1.1 Einführung

40 Widget-Konfiguration

42 5

40 .1 Tk_ConfigureWidget 42 5

40 .1 .1 Der Datentyp Tk_ConfigSpecs für Konfigurationstabellen

427

40 .1 .2 Der Aufruf von Tk_ConfigureWidget 430

40.1 .3 Fehler bei der Widget-Konfiguration 43 1

40 .1 .4 Modifizieren der augenblicklichen Konfiguration 43 1

40 .1 .5 Die Funktion Tk_Configurelnfo 43 1

40 .1 .6 Tk_FreeOptions 43 2

40 .1 .7 Weitere Einsatzgebiete für Konfigurationstabellen 432

40.2 Ressource-Caches 43 3

40 .2 .1 Graphikkontexte 434

40 .2 .2 Weitere Ressourcen 43 5

40.3 Tk_Uids 43 6

40.4 Weitere Konvertierungsfunktionen 43 7

40.5 Die Modifikation von Fensterattributen 43 8

40.6 Die Konfigurationsfunktion der Square-Widgets 440

40.7 Die Widget-Befehlsprozedur für Squares 44 1

41 Events

44 5

41 .1 X-Events 44 5

41 .2 File-Events 45 0

41 .3 Timer-Events 45 3

41 .4 Idle-Callbacks 45 4

41 .5 Generische Event-Handler 455

41 .6 Der Aufruf des Event-Dispatchers 45 7

42 Ausgabe von Widgets

46 1

42.1 Verzögerte Ausgabe von Widgets 46 1

42.2 Double-Buffering über Pixmaps 463

42.3 Ausgabe graphischer Objekte 465

43 Löschen von Widgets

46 9

43.1 Grundlagen 46 9

43.2 Verzögertes Löschen 471

Page 15: Tcl und Tk - GBVTcl und Tk 'Entwicklung grafischer Beititzersdinittstellen für das X Window System ,' I, 2 . - v Anmerkungen zur Übersetzung xxi Vorwort xxv 1 Einführung 1 1.1 Einführung

44 Der Umgang mit der Selektion

475

44.1 Callback-Prozeduren für die Selektion 476

44.2 Beantragen der Selektion 479

44.3 Abfrage der Selektion 48 0

45 Geometry-Management

48 3

45 .1 Wunschgrößen von Widgets 483

45.2 Interne Ränder 485

45.3 Rasterungen 487

45.4 Geometry-Manager 487

45.5 Festlegung der Zuständigkeit 489

45.6 Abfrage von Geometrie-Informationen 490

45.7 Mapping und Setzen der Geometrie 490

45.8 Implementierung eines Geometry-Managers 492

A Die Installation von Tcl und Tk

495

A.1 Versionen 49 5

A.2 Das Master-Directory 49 6

A.3 Die Beschaffung von Distributionen via N l'1' 496

A.4 Die Beschaffung von Distributionen Ober E-Mail 498

A.5 Distributionen compilieren und-installieren 498

A.6 Erweiterungspakete 499

A.7 Die Newsgroup comp.lang.tcl 500

B Glossar

501

Index

513