Now that I'm
In my experience in the open-source world, when it comes to things like navigating install hell, finding out if something is a feature or a bug, or learning how to optimize code, community is invaluable. There is a large body of know-how that only emerges if a lot of people use something. For that reason alone, I recommend beginners use PyQt to cut their teeth.
Also, PyQt has much better documentation. I have found, countless times, for some reason PySide docs leave out crucial details about methods and classes that PyQt includes. Not sure why, but the automatic documentation generator is much better for PyQt (for one representative example, compare the online docs for QTextEdit.setAlignment method for the two frameworks).
There is another good reason: Summerfield's book is the best introductory book on Qt programming in Python, and it uses PyQt. It rescued me me from floundering as a Qt cargo cult programmer, where I would just hunt (Google) and peck out something that sometimes worked. His book teaches the fundamentals of the framework from the ground up. Admittedly, the PySide Summer repository does take the sails out of this reason a little bit, as it should make it easier for beginners to work through his book with PySide. (Yes, this entire post is tinged with irony in a few ways).
Note many people start out with dollar signs in their eyes, but in practice if you are building a little application, and are truly a beginner, you could easily build in PyQt first while learning. If you want to commercialize the product you could easily port to PySide.
I should be clear: my argument isn't that PyQt is objectively better than PySide, but that because they are basically the same framework, for beginners I'd suggest going with the package with the most active community.
Notes
1 That is not to say the documentation is fantastic for PyQt. For someone neutral about C++ versus Python, I would recommend starting with Qt in C++. The documentation is incomparable, the number of books you can get, etc.. This post is focused on Python, as between Qt and PyQt, there is really no contest.
2 They are roughly, though not exactly, the same. The PySide binding is built using Shiboken while PyQt uses SIP. This can be a nontrivial difference, as SIP is more mature than Shiboken. Plus, PyQt is on version 5, as mentioned. The differences, as of Fall 2014, don't seem significant enough to be deciding factors. (Note added in early 2015: it is clear this will become a larger factor as time goes on. So far there is talk, but no palpable progress, in moving PySide to Qt 5).
4 comments:
I wish there was a nice, modern book for PyQt/PySide on Python 3.x for beginners. Summerfield focuses on the old API and I don't want to waste my time learning an obsolete API.
For now, I'm sticking with Tkinter's fugliness...
Anon--fair enough, though I should point out that he has ported the code from his book to Python 3 and it is easy to follow along. He has links at his book's site. And of course my PySide Summer project has ported most of it to the new API (which is the only one available in PySide).
While I can understand wanting to focus on the new API, I have frankly found it very instructive to be forced to translate between them, because the old API is still fairly common, and for instance when reading posts at Stack Overflow from people who code in C++ it is very helpful to be familiar with multiple approaches.
But yeah, it would be great if Summerfield redid his book with the new API. :)
Thanks for the article!
Was just answering a Qt-related question on SO and realized there are two versions of Qt for Python. Just another reason to stay with C++.
Valentin yes, true, if you are comfortable with C++, then just use Qt. As I wrote in the first note in the post: "For someone neutral about C++ versus Python, I would recommend starting with Qt in C++. The documentation is incomparable, the number of books you can get, etc.. This post is focused on Python, as between Qt and PyQt, there is really no contest." That still seems right. Even more than when I first wrote it.
Post a Comment