PyQt Rapid Application Development




Lorenzo Mancini (lmancini@develer.com)
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
What's wrong with C++?
   Compile/run workflow
   Manual memory management
   (Few) testing facilities
   Wrong frame of mind
   Steep learning curve
Learning C++ in 21 days
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
Learning Python in 21 14 days
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!
First PyQt program


from PyQt4.Qt import *

app = QApplication([])
l = QLabel(“Hello world!”)
l.show()
app.exec_()
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_()
A simple text editor




      Live demo
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
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
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)
THANKS !
                                Develer S.r.l.
                             Via Mugellese 1/A
                         50013 Campi Bisenzio
                                 Firenze - Italy




Contacts
Mail: info@develer.com
Phone: +39-055-3984627
Fax: +39 178 6003614
http://www.develer.com

PyQt: rapid application development

  • 1.
    PyQt Rapid ApplicationDevelopment Lorenzo Mancini (lmancini@develer.com)
  • 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 withC++?  Compile/run workflow  Manual memory management  (Few) testing facilities  Wrong frame of mind  Steep learning curve
  • 4.
  • 5.
    2 words aboutPython  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
  • 6.
  • 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 fromPyQt4.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_()
  • 10.
    A simple texteditor Live demo
  • 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)
  • 14.
    THANKS ! Develer S.r.l. Via Mugellese 1/A 50013 Campi Bisenzio Firenze - Italy Contacts Mail: info@develer.com Phone: +39-055-3984627 Fax: +39 178 6003614 http://www.develer.com