Table of Contents

preface xv
special thanks xvii
about the reader xix
about the author xx
conventions xxi
about the cover xxii
author online xxiii

Part 1 Basic concepts 1

1 Python 3
1.1 Introduction to Python programming and a feature review 3
Why Python? 4, Where can Python be used? 5
1.2 Key data types: lists, tuples and dictionaries 5
Lists 5, Tuples 7, Dictionaries 8
1.3 Classes 9
How do classes describe objects? 9, Defining classes 9, Neat Python trick #10 9, Initializing an instance 10, Methods 10, Private and public variables and methods 11, Inheritance 11, Multiple inheritance 11, Mixin classes 11
2 Tkinter 12
2.1 The Tkinter module 12
What is Tkinter? 12, What about performance? 13, How do I use Tkinter? 13, Tkinter features 14
2.2 Mapping Tcl/Tk to Tkinter 14
2.3 Win32 and Unix GUIs 15
2.4 Tkinter class hierarchy 16
2.5 Tkinter widget appearance 17
3 Building an application 18
3.1 Calculator example: key features 21
3.2 Calculator example: source code 21
3.3 Examining the application structure 27
3.4 Extending the application 28

Part 2 Displays 29

4 Tkinter widgets 31
4.1 Tkinter widget tour 31
Toplevel 32, Frame 33, Label 35, Button 36, Entry 37, Radiobutton 37, Checkbutton 38, Menu 39, Message 42, Text 43, Canvas 44, Scrollbar 45, Listbox 45, Scale 46
4.2 Fonts and colors 47
Font descriptors 47, X Window System font descriptors 47, Colors 48, Setting application-wide default fonts and colors 49
4.3 Pmw Megawidget tour 49
AboutDialog 50, Balloon 50, ButtonBox 51, ComboBox 52, ComboBoxDialog 53, Counter 54, CounterDialog 55, Dialog 56, EntryField 56, Group 57, LabeledWidget 58, MenuBar 59, MessageBar 59, MessageDialog 61, NoteBookR 61, NoteBookS 62, NoteBook 63, OptionMenu 64, PanedWidget 65, PromptDialog 66, RadioSelect 66, ScrolledCanvas 67, ScrolledField 68, ScrolledFrame 69, ScrolledListbox 70, ScrolledText 70, SelectionDialog 71, TextDialog 72, TimeCounter 73
4.4 Creating new megawidgets 73
Description of the megawidget 73, Options 74, Creating the megawidget class 74
5 Screen layout 77
5.1 Introduction to layout 77
Geometry management 78
5.2 Packer 79
Using the expand option 82, Using the fill option 82, Using the padx and pady options 84, Using the anchor option 84, Using hierarchical packing 84
5.3 Grid 86
5.4 Placer 90
5.5 Summary 94
6 Events, bindings and callbacks 95
6.1 Event-driven systems: a review 95
What are events? 96, Event propagation 97, Event types 97
6.2 Tkinter events 98
Events 98
6.3 Callbacks 102
6.4 Lambda expressions 103
Avoiding lambdas altogether 103
6.5 Binding events and callbacks 104
Bind methods 104, Handling multiple bindings 106
6.6 Timers and background procedures 107
6.7 Dynamic callback handlers 107
6.8 Putting events to work 108
Binding widgets to dynamic data 108, Data verification 111, Formatted (smart) widgets 117
6.9 Summary 119
7 Using classes, composites and special widgets 120
7.1 Creating a Light Emitting Diode class 120
Let?s try that again 126, What has changed? 129
7.2 Building a class library 129
Adding a hex nut to our class library 131, Creating a switch class 133, Building a MegaWidget 136
7.3 Summary 139
8 Dialogs and forms 140
8.1 Dialogs 141
Standard dialogs 141, Data entry dialogs 142, Single-shot forms 146, Tkinter variables 152
8.2 A standard application framework 155
8.3 Data dictionaries 165
8.4 Notebooks 172
8.5 Browsers 175
8.6 Wizards 184
8.7 Image maps 191
8.8 Summary 198
9 Panels and machines 199
9.1 Building a front panel 199
9.2 Modularity 201
9.3 Implementing the front panel 201
9.4 GIF, BMP and overlays 215
9.5 And now for a more complete example 220
9.6 Virtual machines using POV-Ray 232
And now for something completely different... #10 The Example 233
9.7 Summary 236
10 Drawing blobs and rubber lines 237
10.1 Drawing on a canvas 238
Moving canvas objects 243
10.2 A more complete drawing program 244
10.3 Scrolled canvases 251
10.4 Ruler-class tools 254
10.5 Stretching canvas objects 258
10.6 Some finishing touches 262
10.7 Speed drawing 271
10.8 Summary 275
11 Graphs and charts 276
11.1 Simple graphs 276
11.2 A graph widget 279
Adding bargraphs 286, Pie charts 289
11.3 3-D graphs 292
11.4 Strip charts 296
11.5 Summary 298
12 Navigation 300
12.1 Introduction: navigation models 300
12.2 Mouse navigation 301
12.3 Keyboard navigation: ?mouseless navigation? 301
12.4 Building navigation into an application 302
12.5 Image maps 305
12.6 Summary 305
13 The window manager 306
13.1 What is a window manager? 306
13.2 Geometry methods 307
13.3 Visibility methods 308
13.4 Icon methods 309
13.5 Protocol methods 309
13.6 Miscellaneous wm methods 310

Part 3 Putting it all together... 311

14 Extending Python 313
14.1 Writing a Python extension 313
14.2 Building Python extensions 316
Linking an extension statically in Unix 316, Linking an extension statically in Windows 317, Building a dynamic module in Unix 317, Building a dynamic module in Windows 318, Installing dynamic modules 319, Using dynamic modules 319
14.3 Using the Python API in extensions 319
14.4 Building extensions in C++ 320
14.5 Format strings 321
14.6 Reference counts 324
14.7 Embedding Python 325
14.8 Summary 328
15 Debugging applications 329
15.1 Why print statements? 329
15.2 A simple example 330
15.3 How to debug 333
15.4 A Tkinter explorer 334
15.5 pdb 336
15.6 IDLE 336
15.7 DDD 337
16 Designing effective graphics applications 338
16.1 The elements of good interface design 339
16.2 Human factors 342
Choosing fonts 343, Use of color in graphical user interfaces 344, Size considerations 346
16.3 Alternative graphical user interfaces 346
16.4 Summary 347
17 Programming for performance 348
17.1 Everyday speedups 348
Program organization 349, Using the Python optimizer 350, Examining code 350
17.2 Tkinter performance 350
Keep it short! 350, Eliminate local variables 351, Keep it simple 351, Fast initialization 352, Throttling events 352
17.3 Python techniques 352
Importing modules 353, Concatenating strings 353, Getting nested loops right 354, Eliminate module references 354, Use local variables 355, Using exceptions 356, Using map, filter and reduce 356
17.4 Application profiling 357
17.5 Python extensions 359
17.6 Summary 360
18 Threads and asynchronous techniques 361
18.1 Threading 361
Non-GUI threads 362, GUI threads 365
18.2 ?after? processing 369
18.3 Summary 373
19 Distributing Tkinter applications 374
19.1 General issues in distributing applications 374
19.2 Distributing Unix applications 375
19.3 Distributing Win32 applications 376
19.4 Python distribution tools 379

Part 4 Appendices 381

appendix A Mapping Tk to Tkinter 383
appendix B Tkinter reference 425
appendix C Pmw reference: Python megawidgets 542
appendix D Building and installing Python, Tkinter 610
appendix E Events and keysyms 617
appendix F Cursors 621
appendix G References 625
index 629