ºÝºÝߣ

ºÝºÝߣShare a Scribd company logo
PyQt application development on Maemo Attila Csipa [email_address] attila77 on talk.maemo.org
Components Python Qt
Python Object oriented rapid prototyping language Not just for scripting Easy to read and learn, almost like ¡°pseudo-code¡± Suitable as first language Extensible (add new modules) - C/C++/whatever Embeddable in applications Open Source License (OSI Certified) Mature Large userbase and user community Plenty of good documentation and books
Qt Cross platform framework (Win/Mac/X11, soon S60) Native look and feel Modular (Core, GUI, Network, OpenGL, SQL, WebKit,  etc) Mature Internationalization Excellent documentation Available under both commercial and Open Source licenses
Linux (Debian) based software platform Developed by Nokia Optimized for pocketable devices Current (Maemo 5) UI based on GTK+/Hildon Next generation UI (Maemo 6) based on Qt
How to connect these components ? PyQt PyMaemo Maemo Qt4
PyMaemo python-mafw - Python bindings for the Media Application Framework python-hildondesktop - Python bindings for the home/status widgets API python-notify - Python bindings for libnotify pyclutter (0.8.0-1maemo2) - Python bindings for the Clutter API  gnome-python (2.26.1-1maemo1) pygtk (2.12.1-6maemo7) pygame gst0.10-python - GStreamer python-central (0.6.11.1maemo1) python-osso python-hildon (0.9.0-1maemo10) etc... http://pymaemo.garage.maemo.org Current PyMaemo (Python for Maemo) is based on Python 2.5.4
Python Qt Bindings ¨C API Compatible ! PyQt import PyQt4 Independent Commercial and GPL Mature Qt3 and Qt4 Binding generator: SIP Multiplatform (Win/Mac/Linux) Supports Pythons 2.3 - 3.1 PySide import PySide Nokia Sponsored LGPL New Qt4 Boost::Python and Shiboken Currently Linux only ¨C will be multiplatform Python 2.5-2.6 Considerably larger disk and memory footprint http://www.riverbankcomputing.co.uk http://www.pyside.org
Maemo Qt4 Based on Linux/X11 version of Qt Hildon IM as default Input method Native styling Hardcoded Keys in QMainWindow (Fullscreen, Menu, Zoom) Widget/QObject special properties ... http://qt4.garage.maemo.org Maemo Qt API applies to PyQt applications, too ! http://wiki.maemo.org/Qt4_Hildon#Maemo_Qt_API_Reference
Hello world from PyQt4 import QtGui
import sys
app = QtGui.QApplication(sys.argv)
label  = QtGui.QLabel(¡°Hello world !¡±)
label.show()
sys.exit(app.exec_())
More examples, tutorials Official tutorials and examples have been ported from C++ to Python python-qt4-doc http://www.riverbankcomputing.co.uk/static/Downloads/PyQt4/PyQt-win-gpl-4.6.zip (in examples dir) pyside-examples http://qt.gitorious.org/pyside/pyside-examples/archive-tarball/master   (tar.gz archive)
Integrated Development Environments You already have a favourite Python IDE ? Use it ! Multiplatform means you can use anything, Eric4, IDLE, Komodo, SPE... Downside ¨C Maemo specific APIs or modules are difficult to test On device development Geany iPython Maemo oriented (can run and debug applications directly on a maemo device) Eclipse (pluthon) WingIDE Pro/OSS
PluThon Three layers Eclipse platform - popular and extensible framework for developing IDEs,  http://www.eclipse.org Maemo IDE Common Architecture (MICA), a plugin framework supporting both the ESbox and PluThon products, which provides an extensible platform for Maemo development ( http://mica.garage.maemo.org/2nd_edition/ ): Unified project model, with C/C++ and Python implementations Linux development (e.g. Debian packaging) Support for copying files or mounting a project to run, debug, and profile programs on Maemo devices PluThon product - a targeted set of product plugins, providing the top-level project and import wizards, this help, graphics, and user interface modifications giving Pluthon its unique feel as a product. http://pluthon.garage.maemo.org
PluThon In PluThon 2nd edition, you can: Run on latest Ubuntu distribution, Windows XP/Vista and Mac OS X Leopard (Intel)
Easily connect to your device with predefined connections for USB, WLAN, and Bluetooth
SBRSH host support
Explore your device using the Remote System Explorer
Generate and install Debian packages
Templates for the most common type of maemo applications
Develop application directly on the Internet Tablet
Debug application on the Internet Tablet
Convert projects for PluThon or create new PluThon projects
Run PlutThon applications directly on Internet Tablet, through SSH and SCP, transparently
View the output of the application on the Console View
Profile applications with OProfile

More Related Content

PyQt Application Development On Maemo

  • 1. PyQt application development on Maemo Attila Csipa [email_address] attila77 on talk.maemo.org
  • 3. Python Object oriented rapid prototyping language Not just for scripting Easy to read and learn, almost like ¡°pseudo-code¡± Suitable as first language Extensible (add new modules) - C/C++/whatever Embeddable in applications Open Source License (OSI Certified) Mature Large userbase and user community Plenty of good documentation and books
  • 4. Qt Cross platform framework (Win/Mac/X11, soon S60) Native look and feel Modular (Core, GUI, Network, OpenGL, SQL, WebKit, etc) Mature Internationalization Excellent documentation Available under both commercial and Open Source licenses
  • 5. Linux (Debian) based software platform Developed by Nokia Optimized for pocketable devices Current (Maemo 5) UI based on GTK+/Hildon Next generation UI (Maemo 6) based on Qt
  • 6. How to connect these components ? PyQt PyMaemo Maemo Qt4
  • 7. PyMaemo python-mafw - Python bindings for the Media Application Framework python-hildondesktop - Python bindings for the home/status widgets API python-notify - Python bindings for libnotify pyclutter (0.8.0-1maemo2) - Python bindings for the Clutter API gnome-python (2.26.1-1maemo1) pygtk (2.12.1-6maemo7) pygame gst0.10-python - GStreamer python-central (0.6.11.1maemo1) python-osso python-hildon (0.9.0-1maemo10) etc... http://pymaemo.garage.maemo.org Current PyMaemo (Python for Maemo) is based on Python 2.5.4
  • 8. Python Qt Bindings ¨C API Compatible ! PyQt import PyQt4 Independent Commercial and GPL Mature Qt3 and Qt4 Binding generator: SIP Multiplatform (Win/Mac/Linux) Supports Pythons 2.3 - 3.1 PySide import PySide Nokia Sponsored LGPL New Qt4 Boost::Python and Shiboken Currently Linux only ¨C will be multiplatform Python 2.5-2.6 Considerably larger disk and memory footprint http://www.riverbankcomputing.co.uk http://www.pyside.org
  • 9. Maemo Qt4 Based on Linux/X11 version of Qt Hildon IM as default Input method Native styling Hardcoded Keys in QMainWindow (Fullscreen, Menu, Zoom) Widget/QObject special properties ... http://qt4.garage.maemo.org Maemo Qt API applies to PyQt applications, too ! http://wiki.maemo.org/Qt4_Hildon#Maemo_Qt_API_Reference
  • 10. Hello world from PyQt4 import QtGui
  • 13. label = QtGui.QLabel(¡°Hello world !¡±)
  • 16. More examples, tutorials Official tutorials and examples have been ported from C++ to Python python-qt4-doc http://www.riverbankcomputing.co.uk/static/Downloads/PyQt4/PyQt-win-gpl-4.6.zip (in examples dir) pyside-examples http://qt.gitorious.org/pyside/pyside-examples/archive-tarball/master (tar.gz archive)
  • 17. Integrated Development Environments You already have a favourite Python IDE ? Use it ! Multiplatform means you can use anything, Eric4, IDLE, Komodo, SPE... Downside ¨C Maemo specific APIs or modules are difficult to test On device development Geany iPython Maemo oriented (can run and debug applications directly on a maemo device) Eclipse (pluthon) WingIDE Pro/OSS
  • 18. PluThon Three layers Eclipse platform - popular and extensible framework for developing IDEs, http://www.eclipse.org Maemo IDE Common Architecture (MICA), a plugin framework supporting both the ESbox and PluThon products, which provides an extensible platform for Maemo development ( http://mica.garage.maemo.org/2nd_edition/ ): Unified project model, with C/C++ and Python implementations Linux development (e.g. Debian packaging) Support for copying files or mounting a project to run, debug, and profile programs on Maemo devices PluThon product - a targeted set of product plugins, providing the top-level project and import wizards, this help, graphics, and user interface modifications giving Pluthon its unique feel as a product. http://pluthon.garage.maemo.org
  • 19. PluThon In PluThon 2nd edition, you can: Run on latest Ubuntu distribution, Windows XP/Vista and Mac OS X Leopard (Intel)
  • 20. Easily connect to your device with predefined connections for USB, WLAN, and Bluetooth
  • 22. Explore your device using the Remote System Explorer
  • 23. Generate and install Debian packages
  • 24. Templates for the most common type of maemo applications
  • 25. Develop application directly on the Internet Tablet
  • 26. Debug application on the Internet Tablet
  • 27. Convert projects for PluThon or create new PluThon projects
  • 28. Run PlutThon applications directly on Internet Tablet, through SSH and SCP, transparently
  • 29. View the output of the application on the Console View
  • 31. Trace library and system calls with Ltrace
  • 33. PluThon problems ? Do you have Java installed ? Check Python version ¨C best if matching (=2.5) Have you installed maemo-pc-connectivity on the tablet ? Have you installed x11vnc on the tablet ?
  • 34. Pyqtoreader 100% PyQt Multithreaded 'Online' mindset Plugin oriented QGraphicsView based
  • 36. Maemo PyQt application considerations Startup time Execution speed Size Packaging
  • 37. Startup time C++ example startup: 3.48 sec First run of python version: 7.6 sec Subsequent runs: 6.5 sec Using loader script: 5.8 sec
  • 38. Startup time Using a loader script def main(): app = QtGui.QApplication(sys.argv) scene = QtGui.QGraphicsScene() view = QtGui.QGraphicsView(scene) ... view.show() sys.exit(app.exec_()) app = QtGui.QApplication(sys.argv) scene = QtGui.QGraphicsScene() view = QtGui.QGraphicsView(scene) ... view.show() sys.exit(app.exec_()) app.py loader.py app.py import app app.main()
  • 39. Execution speed How does native C++ code compare to Python ? C++ Python
  • 40. Execution speed If not thought through, can be significatly slower ¨C is there a solution ? Use Qt calls and objects whenever possible Avoid conversions between Python and Qt objects (like str vs QString) Avoid Python slots on high frequency calls Use OpenGL ES acceleration if available If still not good enough, use external code for critical functions
  • 41. Execution speed class quickQGraphicsView(QGraphicsView): ? ? def __init__(self, *arg): ? ? ? ? QGraphicsView.__init__(self, *arg) ? ? ? ? try: ? ? ? ? ? ? from PyQt4.QtOpenGL import QGLWidget ? ? ? ? ? ? glwidget = QGLWidget() ? ? ? ? ? ? if glwidget.isValid(): ? ? ? ? ? ? ? ? self.setViewport(glwidget) ? ? ? ? except Exception, e: ? ? ? ? ? ? logging.warning("OpenGL acceleration not available%s", e) Don't need to know OpenGL ES to use hardware acceleration !
  • 42. Application size Python source is compact, your packages will be small Users need to download bindings (all modules ~50 MB) Use native format resources (jpg/png)
  • 44. Why choose Python + Qt on Maemo ? No scratchbox needed No SDK needed Multiplatform (win/mac/linux) No cross-compilation IDE support Not niche technology Fast development cycle First class Qt citizen Future proof Well documented Already has a vibrant community Python is fun !
  • 45. Why NOT choose Python + QT on Maemo Every last drop of CPU performance needed Memory requirements Startup time is critical Using libraries without proper bindings
  • 47. Thank you ! PyQt application development on Maemo Attila Csipa [email_address] attila77 on talk.maemo.org