| |
| |
Foreword | |
| |
| |
Preface | |
| |
| |
| |
The Beginning | |
| |
| |
| |
Introducing Python | |
| |
| |
"And Now for Something Completely Different" | |
| |
| |
Python Philosophy 101 | |
| |
| |
The Life of Python | |
| |
| |
Signs of the Python Times | |
| |
| |
The Compulsory Features List | |
| |
| |
What's Python Good For? | |
| |
| |
What's Python Not Good For? | |
| |
| |
Truth in Advertising | |
| |
| |
| |
A Sneak Preview | |
| |
| |
"Programming Python: The Short Story" | |
| |
| |
The Task | |
| |
| |
| |
Representing Records | |
| |
| |
| |
Storing Records Persistently | |
| |
| |
| |
Stepping Up to OOP | |
| |
| |
| |
Adding Console Interaction | |
| |
| |
| |
Adding a GUI | |
| |
| |
| |
Adding a Web Interface | |
| |
| |
The End of the Demo | |
| |
| |
| |
System Programming | |
| |
| |
| |
System Tools | |
| |
| |
"The os.path to Knowledge" | |
| |
| |
System Scripting Overview | |
| |
| |
Introducing the sys Module | |
| |
| |
Introducing the os Module | |
| |
| |
Script Execution Context | |
| |
| |
Current Working Directory | |
| |
| |
Command-Line Arguments | |
| |
| |
Shell Environment Variables | |
| |
| |
Standard Streams | |
| |
| |
| |
File and Directory Tools | |
| |
| |
"Erase Your Hard Drive in Five Easy Steps!" | |
| |
| |
File Tools | |
| |
| |
Directory Tools | |
| |
| |
| |
Parallel System Tools | |
| |
| |
"Telling the Monkeys What to Do" | |
| |
| |
Forking Processes | |
| |
| |
Threads | |
| |
| |
Program Exits | |
| |
| |
Interprocess Communication | |
| |
| |
Pipes | |
| |
| |
Signals | |
| |
| |
Other Ways to Start Programs | |
| |
| |
A Portable Program-Launch Framework | |
| |
| |
Other System Tools | |
| |
| |
| |
System Examples: Utilities | |
| |
| |
"Splits and Joins and Alien Invasions" | |
| |
| |
Splitting and Joining Files | |
| |
| |
Generating Forward-Link Web Pages | |
| |
| |
A Regression Test Script | |
| |
| |
Packing and Unpacking Files | |
| |
| |
Automated Program Launchers | |
| |
| |
| |
System Examples: Directories | |
| |
| |
"The Greps of Wrath" | |
| |
| |
Fixing DOS Line Ends | |
| |
| |
Fixing DOS Filenames | |
| |
| |
Searching Directory Trees | |
| |
| |
Visitor: Walking Trees Generically | |
| |
| |
Copying Directory Trees | |
| |
| |
Deleting Directory Trees | |
| |
| |
Comparing Directory Trees | |
| |
| |
| |
GUI Programming | |
| |
| |
| |
Graphical User Interfaces | |
| |
| |
"Here's Looking at You, Kid" | |
| |
| |
Python GUI Development Options | |
| |
| |
Tkinter Overview | |
| |
| |
Climbing the GUI Learning Curve | |
| |
| |
Tkinter Coding Basics | |
| |
| |
Tkinter Coding Alternatives | |
| |
| |
Adding Buttons and Callbacks | |
| |
| |
Adding User-Defined Callback Handlers | |
| |
| |
Adding Multiple Widgets | |
| |
| |
Customizing Widgets with Classes | |
| |
| |
Reusable GUI Components with Classes | |
| |
| |
The End of the Tutorial | |
| |
| |
Python/Tkinter for Tcl/Tk Converts | |
| |
| |
| |
A Tkinter Tour, Part 1 | |
| |
| |
"Widgets and Gadgets and GUIs, Oh My!" | |
| |
| |
Configuring Widget Appearance | |
| |
| |
Top-Level Windows | |
| |
| |
Dialogs | |
| |
| |
Binding Events | |
| |
| |
Message and Entry | |
| |
| |
Checkbutton, Radiobutton, and Scale | |
| |
| |
Running GUI Code Three Ways | |
| |
| |
Images | |
| |
| |
Viewing and Processing Images with PIL | |
| |
| |
| |
A Tkinter Tour, Part 2 | |
| |
| |
"On Today's Menu: Spam, Spam, and Spam" | |
| |
| |
Menus | |
| |
| |
Listboxes and Scrollbars | |
| |
| |
Text | |
| |
| |
Canvas | |
| |
| |
Grids | |
| |
| |
Time Tools, Threads, and Animation | |
| |
| |
The End of the Tour | |
| |
| |
The PyDemos and PyGadgets Launchers | |
| |
| |
| |
GUI Coding Techniques | |
| |
| |
"Building a Better Mouse Trap" | |
| |
| |
GuiMixin: Common Tool Mixin Classes | |
| |
| |
GuiMaker: Automating Menus and Toolbars | |
| |
| |
ShellGui: GUIs for Command-Line Tools | |
| |
| |
GuiStreams: Redirecting Streams to Widgets | |
| |
| |
Reloading Callback Handlers Dynamically | |
| |
| |
Wrapping Up Top-Level Window Interfaces | |
| |
| |
GUIs, Threads, and Queues | |
| |
| |
More Ways to Add GUIs to Non-GUI Code | |
| |
| |
| |
Complete GUI Programs | |
| |
| |
"Python, Open Source, and Camaros" | |
| |
| |
PyEdit: A Text Editor Program/Object | |
| |
| |
PyPhoto: An Image Viewer and Resizer | |
| |
| |
PyView: An Image and Notes Slideshow | |
| |
| |
PyDraw: Painting and Moving Graphics | |
| |
| |
PyClock: An Analog/Digital Clock Widget | |
| |
| |
PyToe: A Tic-Tac-Toe Game Widget | |
| |
| |
Where to Go from Here | |
| |
| |
| |
Internet Programming | |
| |
| |
| |
Network Scripting | |
| |
| |
"Tune In, Log On, and Drop Out" | |
| |
| |
Plumbing the Internet | |
| |
| |
Socket Programming | |
| |
| |
Handling Multiple Clients | |
| |
| |
A Simple Python File Server | |
| |
| |
| |
Client-Side Scripting | |
| |
| |
"Socket to Me!" | |
| |
| |
FTP: Transferring Files over the Net | |
| |
| |
Processing Internet Email | |
| |
| |
POP: Fetching Email | |
| |
| |
SMTP: Sending Email | |
| |
| |
email: Parsing and Composing Mails | |
| |
| |
pymail: A Console-Based Email Client | |
| |
| |
The mailtools Utility Package | |
| |
| |
NNTP: Accessing Newsgroups | |
| |
| |
HTTP: Accessing Web Sites | |
| |
| |
Module urllib Revisited | |
| |
| |
Other Client-Side Scripting Options | |
| |
| |
| |
The PyMailGUI Client | |
| |
| |
"Use the Source, Luke" | |
| |
| |
A PyMailGUI Demo | |
| |
| |
PyMailGUI Implementation | |
| |
| |
| |
Server-Side Scripting | |
| |
| |
"Oh What a Tangled Web We Weave" | |
| |
| |
What's a Server-Side CGI Script? | |
| |
| |
Running Server-Side Examples | |
| |
| |
Climbing the CGI Learning Curve | |
| |
| |
Saving State Information in CGI Scripts | |
| |
| |
The Hello World Selector | |
| |
| |
Refactoring Code for Maintainability | |
| |
| |
More on HTML and URL Escapes | |
| |
| |
Transferring Files to Clients and Servers | |
| |
| |
| |
The PyMailCGI Server | |
| |
| |
"Things to Do When Visiting Chicago" | |
| |
| |
The PyMailCGI Web Site | |
| |
| |
The Root Page | |
| |
| |
Sending Mail by SMTP | |
| |
| |
Reading POP Email | |
| |
| |
Processing Fetched Mail | |
| |
| |
Utility Modules | |
| |
| |
CGI Script Trade-Offs | |
| |
| |
| |
Advanced Internet Topics | |
| |
| |
"Surfing on the Shoulders of Giants" | |
| |
| |
Zope: A Web Application Framework | |
| |
| |
HTMLgen: Web Pages from Objects | |
| |
| |
Jython: Python for Java | |
| |
| |
Grail: A Python-Based Web Browser | |
| |
| |
XML Processing Tools | |
| |
| |
Windows Web Scripting Extensions | |
| |
| |
Python Server Pages | |
| |
| |
Rolling Your Own Servers in Python | |
| |
| |
And Other Cool Stuff | |
| |
| |
| |
Tools and Techniques | |
| |
| |
| |
Databases and Persistence | |
| |
| |
"Give Me an Order of Persistence, but Hold the Pickles" | |
| |
| |
Persistence Options in Python | |
| |
| |
DBM Files | |
| |
| |
Pickled Objects | |
| |
| |
Shelve Files | |
| |
| |
The ZODB Object-Oriented Database | |
| |
| |
SQL Database Interfaces | |
| |
| |
PyForm: A Persistent Object Viewer | |
| |
| |
| |
Data Structures | |
| |
| |
"Roses Are Red, Violets Are Blue; Lists Are Mutable, and So Is Set Foo" | |
| |
| |
Implementing Stacks | |
| |
| |
Implementing Sets | |
| |
| |
Subclassing Built-In Types | |
| |
| |
Binary Search Trees | |
| |
| |
Graph Searching | |
| |
| |
Reversing Sequences | |
| |
| |
Permuting Sequences | |
| |
| |
Sorting Sequences | |
| |
| |
Data Structures Versus Python Built-Ins | |
| |
| |
PyTree: A Generic Tree Object Viewer | |
| |
| |
| |
Text and Language | |
| |
| |
"See Jack Hack. Hack, Jack, Hack" | |
| |
| |
Strategies for Parsing Text in Python | |
| |
| |
String Method Utilities | |
| |
| |
Regular Expression Pattern Matching | |
| |
| |
Advanced Language Tools | |
| |
| |
Handcoded Parsers | |
| |
| |
PyCalc: A Calculator Program/Object | |
| |
| |
| |
Integration | |
| |
| |
| |
Extending Python | |
| |
| |
"I Am Lost at C" | |
| |
| |
Integration Modes | |
| |
| |
C Extensions Overview | |
| |
| |
A Simple C Extension Module | |
| |
| |
Extension Module Details | |
| |
| |
The SWIG Integration Code Generator | |
| |
| |
Wrapping C Environment Calls | |
| |
| |
A C Extension Module String Stack | |
| |
| |
A C Extension Type String Stack | |
| |
| |
Wrapping C++ Classes with SWIG | |
| |
| |
Other Extending Tools | |
| |
| |
| |
Embedding Python | |
| |
| |
"Add Python. Mix Well. Repeat." | |
| |
| |
C Embedding API Overview | |
| |
| |
Basic Embedding Techniques | |
| |
| |
Registering Callback Handler Objects | |
| |
| |
Using Python Classes in C | |
| |
| |
A High-Level Embedding API: ppembed | |
| |
| |
Other Integration Topics | |
| |
| |
| |
The End | |
| |
| |
| |
Conclusion: Python and the Development Cycle | |
| |
| |
"That's the End of the Book, Now Here's the Meaning of Life" | |
| |
| |
"Something's Wrong with the Way We Program Computers" | |
| |
| |
The "Gilligan Factor" | |
| |
| |
Doing the Right Thing | |
| |
| |
Enter Python | |
| |
| |
But What About That Bottleneck? | |
| |
| |
On Sinking the Titanic | |
| |
| |
So What's "Python: The Sequel"? | |
| |
| |
In the Final Analysis | |
| |
| |
Postscript to the Second Edition (2000) | |
| |
| |
Postscript to the Third Edition (2006) | |
| |
| |
Index | |