with reservations
This is a likeable book, recommended without reservation to anyone getting started in python GUI programming. n.b.: the book says virtually nothing of use on the relationship between wxPython and wxWidgets.
The book's three parts introduce in turn wxPython and GUI programming in general, the basic wxPython widgets, and then more complex wxPython stuctures. Each part has six chapters. At the next level down the book is organised as a FAQ: each section or sub-section title is phrased as a direct question: 'What terminology do I need to understand events?', 'How do I create a pop-up menu?', etc.
The authors are serious about GUI programming and good design, and about bringing these to a new audience. The writing is clear and steady if a little earnest, as if an effort has been made to avoid intimidating budding GUI pythonistas.
The FAQ format makes it very easy to use as a reference but, apart from the first section, it gets too tedious to read as a book. This effectively works as a gentle nudge encouraging the reader to try a few things out and come back when they need help.
Although the book has an introductory feel, and a lot of time is spent on foundational issues, it still covers a reasonable amount of ground, up to things like using tree controls, html displays, printing and drag-and-drop.
The book disappointed me (majorly) twice.
First, there are virtually no complete applications (I counted one, a basic sketchpad). There are many working scripts, but these invariably demonstrate a particular widget or behaviour. Compare this with Python and Tkinter Programming by J.E. Grayson (2000), which offers a wide range of often quite spohisticated GUIs, including AppShell.py - a kind of GUI template which the reader can 'fill in' and customise as required.
The authors seem completely unaware of this earlier book on Python GUI programming; their publishers certainly can't have been. Rappin&Dunn (among many others) claim that wxPython improves significantly on Tkinter but, in the absense of any GUIs approaching the sophistication of those in Grayson (2000), they do not demonstrate their case.
Second disappointment: the book contains no discussion at all of SWIG or wxWidgets. wxPython is essentially a Python wrapper around wxWidgets, and it uses SWIG extensively to provide this wrapper. How simple is it to port a wxPython GUI to wxWidgets? Should this be a factor in choosing python GUI toolkits? Practical issues like these remain unaddressed. Although slightly tangential, an illustration of how SWIG is used to generate wxPython from wxWidgets would have made a valuable appendix.
However, wxPython's use of SWIG and wxWidgets is mentioned only in passing, and the book proceeds as if it were of no practical interest.
I found these two omissions extremely annoying, but they are missed opportunities rather than serious errors. Notwithstanding my disappointments I found the book very useable. I recommend it as dead tree format documentation for wxPython, or for python programmers who want to get started on GUIs.
The book can not be recommended for people who want to learn about the relationship between wxPython and wxWidgets.