2. Qt and C++
Qt is a wonderful piece of software
Application multi-platform portability layer
Lots of modules and features
But... it exposes a C++ API
3. What's wrong with C++?
Compile/run workflow
Manual memory management
(Few) testing facilities
Wrong frame of mind
Steep learning curve
5. 2 words about Python
Object-oriented language
Automatic memory management
Language uses strong/dynamic typing
Objects have types, references don't
Code is compiled on-the-fly
No compile/run workflow
Easy to pick up
7. What is PyQt
A binding that maps every Qt class to a
Python class
It's not Qt rewritten in Python
→ Easy to keep in sync with Qt
Developed by Riverbank Software (UK
based)
Qt's feature set + Python development
speed = profit!
8. First PyQt program
from PyQt4.Qt import *
app = QApplication([])
l = QLabel(“Hello world!”)
l.show()
app.exec_()
9. Signal/slot
Any Python callable can be a slot!
from PyQt4.Qt import *
app = QApplication([])
pb = QPushButton("Click me!")
pb.show()
def cb():
pb.setText("CLICKED!")
QObject.connect(pb, SIGNAL("clicked(bool)"), cb)
app.exec_()
11. Reality check
CAD/CAM for fashion design
Uses PyQt from day 1
200000 LOC codebase (including tests)
In production since 2008, actively mantained
Medical appliance control panel
Full rewrite of a 1 man-year C++ application
become unmaintenable
Development completed in 3 man months
...many others
12. PyQt licensing
Qt: GPL / LGPL / commercial
PyQt: GPL (no LGPL!)
→ PyQt GPL:
ok for internal tools
ok for open-source software
Otherwise: PyQt commercial license
13. Urban myths
“Python is too slow to develop real
applications!”
FALSE: In a typical PyQt application, the bulk of
the running code is “inside” Qt, hence running
at C++ speed.
“I must distribute the Python interpreter
along with my program source!”
FALSE: you can package your application
(PyInstaller), then bundle into a nice graphical
installer (InnoSetup)