So I'm building PySide on the Mac as part of a new medical imaging endeavor. For years I've wanted a usable mashup of ITK, VTK, Python, and Qt as a medical imaging toolkit. Add numpy and scipy on the Python side, and you have a very powerful combination of software. But if the interface to Python is achieved through automatically generated bindings for ITK, VTK, and Qt, you have a really brittle build. I keep finding such projects that seem to thrive for a year or so and then die as it becomes impossible to support people's use of the bindings with changing toolkits and with Python itself evolving.
One way to deal with brittle builds is freeze each of the components at a particular version, and to upgrade only in a carefully tested and controlled manner. For our own software releases, this is how we work. But for new development and my own experimentation, it's nice to dream that you can build against a number of software packages, at random released or development versions, without having things break so frequently. The strategy for doing this is to limit the points of intersection between the various packages. The smaller the area of coverage of those interfaces, the more change tolerant they'll be (obviously).
At the moment, ITK, VTK, and Qt should be somewhat of a slam dunk. They only intersect in carefully controlled places and things work well. Adding language bindings for Python is troublesome, and the result may not be terribly satisfying (esp. in the case of heavily templated ITK). So I've decided to limit the interface between Python and other software to interfaces that we write, explicitly, by hand. We'll see how that goes.
Being able to develop and extend the UI from Python is appealing, however. If you're as old as I am, you may miss the good old days when Tcl/Tk came into existence and suddenly X applications flourished. I'd like to get back there again. Hell, we did surgical guidance with user interfaces glued together with Tcl, but when the community moved to ITK for imaging development, the pace of development changed. You and I can write user interfaces in Qt with C++, but what we're missing is the ability to create specialized, possibly throw-away graphical user interfaces as easily as we create one-off Perl, Python, and Bash scripts. That makes me want to break my earlier rule about small intersection points and look to expose serious amounts of Qt to Python.
There seem to be at least three sets of Python bindings for Qt right now, and I've just scratched the surface exploring them. But I'm going to be biased, possibly unfairly, to PySide as it's hosted at qt.nokia.com and therefore, hopefully, has the weight of those resources behind it. And that's why I'm building PySide.
More on the project later.