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