PyQt for Desktop and Embedded Devices



Similar documents
David Boddie. PyCon UK 2007, Birmingham

EuroPython 2006, CERN, Geneva David Boddie and Torsten Marek * Qt and Trolltech are registered trademarks of Trolltech ASA

Surface and Volumetric Data Rendering and Visualisation

Mobile Development with Qt

BogDan Vatra and Andy Gryc. Qt on Android: Is it right for you?

Mobility Introduction Android. Duration 16 Working days Start Date 1 st Oct 2013

SYST35300 Hybrid Mobile Application Development

Lecture 1 Introduction to Android

Introduction to GUI programming in Python. Alice Invernizzi

Qt at NA-MIC Summer Qt Development Frameworks: Qt is used everywhere. Qt licenses support all business models. Why Qt?

HYBRID APPLICATION DEVELOPMENT IN PHONEGAP USING UI TOOLKITS

Programming Mobile Apps with Python

Workshop on Android and Applications Development

OMX, Android, GStreamer How do I decide what to use? 15 July 2011

Basic Trends of Modern Software Development

Our software strategy

Developing Applications for ios

The Most Popular UI/Apps Framework For IVI on Linux

HTML5 AUTOMOTIVE 2013 White Paper Series

Getting Started with Tizen SDK : How to develop a Web app. Hong Gyungpyo 洪 競 杓 Samsung Electronics Co., Ltd

Università Degli Studi di Parma. Distributed Systems Group. Android Development. Lecture 1 Android SDK & Development Environment. Marco Picone

ITG Software Engineering

Beginning Nokia Apps. Development. Qt and HTIVIL5 for Symbian and MeeGo. Ray Rischpater. Apress. Daniel Zucker

Getting Started with Android Programming (5 days) with Android 4.3 Jelly Bean

4.1 Introduction 4.2 Explain the purpose of an operating system Describe characteristics of modern operating systems Control Hardware Access

Writing standalone Qt & Python applications for Android

Module Title: Software Development A: Mobile Application Development

Mobile Phones Operating Systems

Android Development. Lecture AD 0 Android SDK & Development Environment. Università degli Studi di Parma. Mobile Application Development

Introduction to Android

CS 528 Mobile and Ubiquitous Computing Lecture 2: Android Introduction and Setup. Emmanuel Agu

ANDROID INTRODUCTION TO ANDROID

Qt Features for Hybrid Web/Native Application Development

WEB, HYBRID, NATIVE EXPLAINED CRAIG ISAKSON. June 2013 MOBILE ENGINEERING LEAD / SOFTWARE ENGINEER

Reminders. Lab opens from today. Many students want to use the extra I/O pins on

Mobile Operating Systems. Week I

ipad, a revolutionary device - Apple

City of Dublin Education & Training Board. Programme Module for. Mobile Technologies. leading to. Level 6 FETAC. Mobile Technologies 6N0734

Android Application Development. Daniel Switkin Senior Software Engineer, Google Inc.

Rapid GUI Application Development with Python

Specialized Android APP Development Program with Java (SAADPJ) Duration 2 months

Driving the User Interface. Trends in Automotive GUIs

Mobile App Design and Development

Mobile Operating Systems Lesson 05 Windows CE Part 1

Android (Basic + Advance) Application Development

Android Basics. Xin Yang

JavaFX Session Agenda

An introduction to creating Web 2.0 applications in Rational Application Developer Version 8.0

Smartphone Application Development using HTML5-based Cross- Platform Framework

Building consumer products with open source

Functions of NOS Overview of NOS Characteristics Differences Between PC and a NOS Multiuser, Multitasking, and Multiprocessor Systems NOS Server

ArcGIS 10.1 Web Apps and APIs. John Hasthorpe & Kai Hübner

DEVELOPING MOBILE APPLICATIONS USING ANDROID

HTML5 Applications Made Easy on Tizen IVI. Brian Jones / Jimmy Huang

Qt on Raspberry Pi. Jeff Tranter Integrated Computer Solutions (ICS) Qt Developer Days

Introduction to Tizen SDK Alpha. Taiho Choi Samsung Electronics

Network operating systems typically are used to run computers that act as servers. They provide the capabilities required for network operation.

Mobile App Infrastructure for Cross-Platform Deployment (N11-38)

Performance of Host Identity Protocol on Nokia Internet Tablet

Mobile Devices and Systems Lesson 02 Handheld Pocket Computers and Mobile System Operating Systems

ios Hybrid Mobile Application Development

Introduction to BlackBerry Smartphone Web Development Widgets

Development. SriSeshaa Technologies. Table of Contents

Issues of Hybrid Mobile Application Development with PhoneGap: a Case Study of Insurance Mobile Application

All About Android WHAT IS ANDROID?

Real time vehicle tracking and driver behaviour monitoring using cellular handset based accelerometer and GPS data

Generate Android App

Introduction to Android: Hello, Android! 26 Mar 2010 CMPT166 Dr. Sean Ho Trinity Western University

Embedded Linux development training 4 days session

ECWM511 MOBILE APPLICATION DEVELOPMENT Lecture 1: Introduction to Android

«compl*tc IDIOT'S GUIDE. Android App. Development. by Christopher Froehlich ALPHA. A member of Penguin Group (USA) Inc.

COURSE CONTENT. GETTING STARTED Select Android Version Create RUN Configuration Create Your First Android Activity List of basic sample programs

Mobile application development with QML & PySide

Fall Lecture 1. Operating Systems: Configuration & Use CIS345. Introduction to Operating Systems. Mostafa Z. Ali. mzali@just.edu.

Native, Hybrid or Mobile Web Application Development

Android Application Development

Ubuntu, a new force in mobile

Mouse and Pointer Settings. Technical Brief

A Modular Approach to Teaching Mobile APPS Development

Tizen Web Runtime Update. Ming Jin Samsung Electronics

Republic Polytechnic School of Infocomm C308 Web Framework. Module Curriculum

TECHNOLOGIES MOBILE STRATEGY

Mobile App Proposal Magazine company- @address.com. January 12, y. Direct Contact.

Introduction to TIZEN SDK

ECWM511 MOBILE APPLICATION DEVELOPMENT Lecture 1: Introduction to Android

Cross Platform Applications with IBM Worklight

White Paper INTRODUCTION. In mobile development, there are three different types of applications: PRE-SMARTPHONE MOBILITY NATIVE MOBILE APPLICATIONS

INTERMEDIATE ANDROID DEVELOPMENT Course Syllabus

ORACLE ADF MOBILE DATA SHEET

Andreas Burghart 6 October 2014 v1.0

Some Experiences With Python For Android (Py4A) Nik Klever University of Applied Sciences Augsburg

Android: How To. Thanks. Aman Nijhawan

VoIP support on Qtopia. Vladimir Minenko, Ph.D.

Introduction to Android

Chapter 1. Introduction to ios Development. Objectives: Touch on the history of ios and the devices that support this operating system.

International Journal of Research in Advent Technology Available Online at:

rich mobile applications made easy

Mobile Operating Systems Lesson 07 Symbian OS

CSE 237A Final Project Final Report

Transcription:

PyQt for Desktop and Embedded Devices David Boddie <david.boddie@nokia.com> PyCon Tre, Firenze, 8 th 10 th May 2009

About Qt Developed by Qt Software (Nokia) Cross-platform C++ framework Linux, Windows, Mac OS X, other Unixes Embedded Linux, Windows CE, Series 60 Not just a widget toolkit other features Available under the GPL (version 3) Available under the LGPL (version 2 1) Also available under a Commercial License

About PyQt Developed by Riverbank Computing Ltd. Set of Python bindings to Qt Upcoming PyQt 4.5 will support Python 3 Bindings are generated using SIP Includes most features of Qt Available under the GPL (version 2 and 3) Also available under a Commercial License

PyQt Modules PyQt exposes many of Qt's 21 modules. We'll take a quick look at these: QtCore QtDesigner QtGui QtHelp QtNetwork QtOpenGL QtScript QtSql QtSvg QtWebKit QtXmlPatterns Phonon

PyQt Modules PyQt exposes many of Qt's 21 modules. We'll take a quick look at these: QtCore QtDesigner QtGui QtHelp QtNetwork QtOpenGL QtScript QtSql QtSvg QtWebKit QtXmlPatterns Phonon

Graphical User Interfaces PyQt includes a comprehensive set of widgets: QCheckBox import sys from PyQt4.QtGui import * QComboBox app = QApplication(sys.argv) QSpinBox checkbox = QCheckBox("C&ase sensitive") checkbox.show() QPushButton QSlider QRadioButton pushbutton = QPushButton("Cancel") pushbutton.show() calendar = QCalendarWidget() calendar.show() sys.exit(app.exec_()) QCalendarWidget QTableWidget QTextEdit

Graphical User Interfaces PyQt includes a comprehensive set of widgets: QCheckBox import sys from PyQt4.QtGui import * QComboBox app = QApplication(sys.argv) QSpinBox checkbox = QCheckBox("C&ase sensitive") checkbox.show() QPushButton QSlider QRadioButton pushbutton = QPushButton("Cancel") pushbutton.show() calendar = QCalendarWidget() calendar.show() sys.exit(app.exec_()) QCalendarWidget QTableWidget QTextEdit

Widgets and Layouts class PyPIWidget(QWidget): def init (self, parent = None): QWidget. init (self, parent) self.fieldcombo = QComboBox() self.fieldcombo.additems(["name", "version", "author", "author_email", "maintainer", "maintainer_email", "home_page", "license", "summary", "description", "keywords", "platform", "download_url"]) self.termsedit = QLineEdit() layout = QFormLayout() layout.addrow(self.tr("search &field:"), self.fieldcombo) layout.addrow(self.tr("search &terms:"), self.termsedit) self.treewidget = QTreeWidget() self.treewidget.setalternatingrowcolors(true) self.treewidget.setrootisdecorated(false) self.treewidget.setheaderlabels( [self.tr("name"), self.tr("description")]) mainlayout = QVBoxLayout() mainlayout.addlayout(layout) mainlayout.addwidget(self.treewidget) self.connect(self.termsedit, SIGNAL("returnPressed()"), self.search)

Widgets and Layouts class PyPIWidget(QWidget): def init (self, parent = None): QWidget. init (self, parent) self.fieldcombo = QComboBox() self.fieldcombo.additems(["name", "version", "author", "author_email", "maintainer", "maintainer_email", "home_page", "license", "summary", "description", "keywords", "platform", "download_url"]) self.termsedit = QLineEdit() layout = QFormLayout() layout.addrow(self.tr("search &field:"), self.fieldcombo) layout.addrow(self.tr("search &terms:"), self.termsedit) self.treewidget = QTreeWidget() self.treewidget.setalternatingrowcolors(true) self.treewidget.setrootisdecorated(false) self.treewidget.setheaderlabels( [self.tr("name"), self.tr("description")]) mainlayout = QVBoxLayout() mainlayout.addlayout(layout) mainlayout.addwidget(self.treewidget) self.connect(self.termsedit, SIGNAL("returnPressed()"), self.search)

Widgets and Layouts class PyPIWidget(QWidget): def init (self, parent = None): QWidget. init (self, parent) self.fieldcombo = QComboBox() self.fieldcombo.additems(["name", "version", "author", "author_email", "maintainer", "maintainer_email", "home_page", "license", "summary", "description", "keywords", "platform", "download_url"]) self.termsedit = QLineEdit() layout = QFormLayout() layout.addrow(self.tr("search &field:"), self.fieldcombo) layout.addrow(self.tr("search &terms:"), self.termsedit) self.treewidget = QTreeWidget() self.treewidget.setalternatingrowcolors(true) self.treewidget.setrootisdecorated(false) self.treewidget.setheaderlabels( [self.tr("name"), self.tr("description")]) mainlayout = QVBoxLayout() mainlayout.addlayout(layout) mainlayout.addwidget(self.treewidget) self.connect(self.termsedit, SIGNAL("returnPressed()"), self.search)

Widgets and Layouts class PyPIWidget(QWidget): def init (self, parent = None): QWidget. init (self, parent) self.fieldcombo = QComboBox() self.fieldcombo.additems(["name", "version", "author", "author_email", "maintainer", "maintainer_email", "home_page", "license", "summary", "description", "keywords", "platform", "download_url"]) self.termsedit = QLineEdit() layout = QFormLayout() layout.addrow(self.tr("search &field:"), self.fieldcombo) layout.addrow(self.tr("search &terms:"), self.termsedit) self.treewidget = QTreeWidget() self.treewidget.setalternatingrowcolors(true) self.treewidget.setrootisdecorated(false) self.treewidget.setheaderlabels( [self.tr("name"), self.tr("description")]) mainlayout = QVBoxLayout() mainlayout.addlayout(layout) mainlayout.addwidget(self.treewidget) self.connect(self.termsedit, SIGNAL("returnPressed()"), self.search)

Graphics View The Graphics View framework provides a canvas: Interactive items (drag and drop) Nested items and groups Animation OpenGL rendering Embedded widgets Printing

Multimedia Support Phonon handles audio and video: class Player(QWidget): def init (self, parent = None): QWidget. init (self, parent) self.player = VideoPlayer(VideoCategory) #... def play(self): if self.player.isplaying(): self.player.stop() else: url = QUrl(self.urlEdit.text()) self.player.play(mediasource(url))

XML Processing Use XPath, XQuery and XSLT to process XML: <sun rise="2009-05-01t05:32:17" set="2009-05-01t20:23:58" /> <forecast> def fetchforecast(self, place): <tabular> <time from="2009-05-01t06:00:00" to="2009-05-01t12:00:00" url = "http://www.yr.no/place/" period="1"> + \ <symbol number="2" name="fair" /> place + "/forecast.xml" <precipitation value="0.0" /> b = QBuffer() <winddirection deg="114.6" code="ese" b.setdata(query_string) name="east-southeast" /> <windspeed mps="0.8" name="light air" /> b.open(qbuffer.readonly) <temperature unit="celcius" value="8" /> <pressure unit="hpa" value="1022.2" /> query = QXmlQuery() </time> query.bindvariable("url",... QXmlItem(QVariant(url))) declare variable $url external; query.setquery(b) ( b.close() string(doc($url)//sun/@rise), string(doc($url)//sun/@set), if query.isvalid(): self.results.clear() for $time in doc($url)//tabular/time query.evaluateto(self.results) order by $time/@from return (string($time/@from), self.updatetable() string($time/symbol/@name), string($time/symbol/@number), string($time/temperature/@value), string($time/temperature/@unit)) ) Could be useful if combined with GPS...

XML Processing Use XPath, XQuery and XSLT to process XML: <sun rise="2009-05-01t05:32:17" set="2009-05-01t20:23:58" /> <forecast> def fetchforecast(self, place): <tabular> <time from="2009-05-01t06:00:00" to="2009-05-01t12:00:00" url = "http://www.yr.no/place/" period="1"> + \ <symbol number="2" name="fair" /> place + "/forecast.xml" <precipitation value="0.0" /> b = QBuffer() <winddirection deg="114.6" code="ese" b.setdata(query_string) name="east-southeast" /> <windspeed mps="0.8" name="light air" /> b.open(qbuffer.readonly) <temperature unit="celcius" value="8" /> <pressure unit="hpa" value="1022.2" /> query = QXmlQuery() </time> query.bindvariable("url",... QXmlItem(QVariant(url))) declare variable $url external; query.setquery(b) ( b.close() string(doc($url)//sun/@rise), string(doc($url)//sun/@set), if query.isvalid(): self.results.clear() for $time in doc($url)//tabular/time query.evaluateto(self.results) order by $time/@from return (string($time/@from), self.updatetable() string($time/symbol/@name), string($time/symbol/@number), string($time/temperature/@value), string($time/temperature/@unit)) ) Could be useful if combined with GPS...

Web Browser Engine WebKit is integrated into Qt: Web browser widget JavaScript, SVG, CSS, SSL, etc. Control over browser settings and history Support for Netscape and native Qt plugins Client-side storage Support for in-page editing Python/C++ objects can be added to pages

Web Browser Engine WebKit is integrated into Qt: Web browser widget JavaScript, SVG, CSS, SSL, etc. Control over browser settings and history Support for Netscape and native Qt plugins Client-side storage Support for in-page editing Python/C++ objects can be added to pages

Intermission These features are nice on the desktop! We can also use them on embedded hardware.

Embedded Platforms Where is Embedded Linux used: Disadvantages: Advantages: Phones, Qt Small runs screens on media Embedded ( players 240 320) Linux, Windows CE, Can Series be portable 60 GPS Python Low memory devices, runs on Web ( Embedded 64 tablets MB) Linux, Windows Accelerometers CE, Series 60 Set Slow PyQt top processors runs boxes on Embedded ( 300 MHz) Linux Touch screens Different Routers, Windows plug architectures CE?, computing Series 60? GPS Limited Handhelds, storage toys, ( kit 128MB) computing GSM, Wi-Fi, Bluetooth Cut down environments Cameras http://www.linuxdevices.com/

Embedded Platforms Where is Embedded Linux used: Disadvantages: Advantages: Phones, Qt Small runs screens on media Embedded ( players 240 320) Linux, Windows CE, Can Series be portable 60 GPS Python Low memory devices, runs on Web ( Embedded 64 tablets MB) Linux, Windows Accelerometers CE, Series 60 Set Slow PyQt top processors runs boxes on Embedded ( 300 MHz) Linux Touch screens Different Routers, Windows plug architectures CE?, computing Series 60? GPS Limited Handhelds, storage toys, ( kit 128MB) computing GSM, Wi-Fi, Bluetooth Cut down environments Cameras http://www.linuxdevices.com/

Embedded Platforms Where is Embedded Linux used: Disadvantages: Advantages: Phones, Qt Small runs screens on media Embedded ( players 240 320) Linux, Windows CE, Can Series be portable 60 GPS Python Low memory devices, runs on Web ( Embedded 64 tablets MB) Linux, Windows Accelerometers CE, Series 60 Set Slow PyQt top processors runs boxes on Embedded ( 300 MHz) Linux Touch screens Different Routers, Windows plug architectures CE?, computing Series 60? GPS Limited Handhelds, storage toys, ( kit 128MB) computing GSM, Wi-Fi, Bluetooth Cut down environments Cameras http://www.linuxdevices.com/

Embedded Python Ways Not Nice so to I built build nice things things Python about about for Python Linux Python (2.x): Devices: (2.x): Portable Annoying OpenEmbedded Scratchbox C to implementation cross-compile (despite a good foundation) Fairly Relies Scratchbox Used small on to a try native (compared PyQt interpreter on Maemo to all the at various Qt libraries) points Few Buildroot Runs There dependencies setup.py are packages using available the built now interpreter Crosstool Batteries Needs a included native interpreter to build a parser generator Package-specific Distribution Used to try packages PyQt checks on a (e.g., Greenphone Debian)... OpenSSL, Curses, pyexpat, Tkinter Batteries included (even old ones) Used to create toolchains and/or whole systems.

Embedded Python Ways Not Nice so to I built build nice things things Python about about for Python Linux Python (2.x): Devices: (2.x): Portable Annoying OpenEmbedded Scratchbox C to implementation cross-compile (despite a good foundation) Fairly Relies Scratchbox Used small on to a try native (compared PyQt interpreter on Maemo to all the at various Qt libraries) points Few Buildroot Runs There dependencies setup.py are packages using available the built now interpreter Crosstool Batteries Needs a included native interpreter to build a parser generator Package-specific Distribution Used to try packages PyQt checks on a (e.g., Greenphone Debian)... OpenSSL, Curses, pyexpat, Tkinter Batteries included (even old ones) Used to create toolchains and/or whole systems.

Embedded Python Ways Not Nice so to I built build nice things things Python about about for Python Linux Python (2.x): Devices: (2.x): Portable Annoying OpenEmbedded Scratchbox C to implementation cross-compile (despite a good foundation) Fairly Relies Scratchbox Used small on to a try native (compared PyQt interpreter on Maemo to all the at various Qt libraries) points Few Buildroot Runs There dependencies setup.py are packages using available the built now interpreter Crosstool Batteries Needs a included native interpreter to build a parser generator Package-specific Distribution Used to try packages PyQt checks on a (e.g., Greenphone Debian)... OpenSSL, Curses, pyexpat, Tkinter Batteries included (even old ones) Used to create toolchains and/or whole systems.

Embedded Python Ways Not Nice so to I built build nice things things Python about about for Python Linux Python (2.x): Devices: (2.x): Portable Annoying OpenEmbedded Scratchbox C to implementation cross-compile (despite a good foundation) Fairly Relies Scratchbox Used small on to a try native (compared PyQt interpreter on Maemo to all the at various Qt libraries) points Few Buildroot Runs There dependencies setup.py are packages using available the built now interpreter Crosstool Batteries Needs a included native interpreter to build a parser generator Package-specific Distribution Used to try packages PyQt checks on a (e.g., Greenphone Debian)... OpenSSL, Curses, pyexpat, Tkinter Batteries included (even old ones) Used to create toolchains and/or whole systems.

Qt and PyQt on Linux Devices Which Developing graphics and system Simulating to use? X11-based QWS-based Common (Qt for approach: X11): devices: Fairly Use Xephyr a virtual standard (nested framebuffer procedure X server) for VNC to building simulate to simulate Qt a and small the PyQt screen Not Applications all that common can be developed to cross-compile on desktops Qt for using X11 PyQt Run or simulate the device's window system Qt Obviously, works better look with and feel X extensions may be a (Render) bit different The No need Maemo for SDK a dedicated emulates window the device manager environment Develop The APIs Possible to using should use PyQt be the Need to build your system own for same PyQt X11 libraries to prototype for desktop applications and device Care must be taken with the widgets used: Beware of version differences QWS Input (Qt widgets for Embedded without Linux): a keyboard... Fairly Scrollbars easy to on build a small Qt for screen... Embedded Linux PyQt needs patching for cross-compilation Xephyr python Qt uses -ac application.py the -extension framebuffer Composite -qws -display -screen VNC:0:size=240x320 800x480 :1 DISPLAY=:1 vncviewer :0 python application.py Develop using PyQt derived from PyQt for X11

Qt and PyQt on Linux Devices Which Developing graphics and system Simulating to use? X11-based QWS-based Common (Qt for approach: X11): devices: Fairly Use Xephyr a virtual standard (nested framebuffer procedure X server) for VNC to building simulate to simulate Qt a and small the PyQt screen Not Applications all that common can be developed to cross-compile on desktops Qt for using X11 PyQt Run or simulate the device's window system Qt Obviously, works better look with and feel X extensions may be a (Render) bit different The No need Maemo for SDK a dedicated emulates window the device manager environment Develop The APIs Possible to using should use PyQt be the Need to build your system own for same PyQt X11 libraries to prototype for desktop applications and device Care must be taken with the widgets used: Beware of version differences QWS Input (Qt widgets for Embedded without Linux): a keyboard... Fairly Scrollbars easy to on build a small Qt for screen... Embedded Linux PyQt needs patching for cross-compilation Xephyr python Qt uses -ac application.py the -extension framebuffer Composite -qws -display -screen VNC:0:size=240x320 800x480 :1 DISPLAY=:1 vncviewer :0 python application.py Develop using PyQt derived from PyQt for X11

Qt and PyQt on Linux Devices Which Developing graphics and system Simulating to use? X11-based QWS-based Common (Qt for approach: X11): devices: Fairly Use Xephyr a virtual standard (nested framebuffer procedure X server) for VNC to building simulate to simulate Qt a and small the PyQt screen Not Applications all that common can be developed to cross-compile on desktops Qt for using X11 PyQt Run or simulate the device's window system Qt Obviously, works better look with and feel X extensions may be a (Render) bit different The No need Maemo for SDK a dedicated emulates window the device manager environment Develop The APIs Possible to using should use PyQt be the Need to build your system own for same PyQt X11 libraries to prototype for desktop applications and device Care must be taken with the widgets used: Beware of version differences QWS Input (Qt widgets for Embedded without Linux): a keyboard... Fairly Scrollbars easy to on build a small Qt for screen... Embedded Linux PyQt needs patching for cross-compilation Xephyr python Qt uses -ac application.py the -extension framebuffer Composite -qws -display -screen VNC:0:size=240x320 800x480 :1 DISPLAY=:1 vncviewer :0 python application.py Develop using PyQt derived from PyQt for X11

Qt and PyQt on Linux Devices Which Developing graphics and system Simulating to use? X11-based QWS-based Common (Qt for approach: X11): devices: Fairly Use Xephyr a virtual standard (nested framebuffer procedure X server) for VNC to building simulate to simulate Qt a and small the PyQt screen Not Applications all that common can be developed to cross-compile on desktops Qt for using X11 PyQt Run or simulate the device's window system Qt Obviously, works better look with and feel X extensions may be a (Render) bit different The No need Maemo for SDK a dedicated emulates window the device manager environment Develop The APIs Possible to using should use PyQt be the Need to build your system own for same PyQt X11 libraries to prototype for desktop applications and device Care must be taken with the widgets used: Beware of version differences QWS Input (Qt widgets for Embedded without Linux): a keyboard... Fairly Scrollbars easy to on build a small Qt for screen... Embedded Linux PyQt needs patching for cross-compilation Xephyr python Qt uses -ac application.py the -extension framebuffer Composite -qws -display -screen VNC:0:size=240x320 800x480 :1 DISPLAY=:1 vncviewer :0 python application.py Develop using PyQt derived from PyQt for X11

Demonstrations Two devices: Nokia N800: Greenphone: CPU: 400 MHz OMAP2420 Screen: 800 480 CPU: 312 MHz Intel PXA270 Screen: 240 320

At this point we show some demonstrations...

Cutting Out Features Inappropriate features: Configuring Qt for Embedded Linux: Classic dialogs too large for small screen devices Menu bars, dock windows follow the wrong paradigm On desktops, we want as many features as possible... Unnecessary features:...but......on Devices embedded with touch devices, screens we might don't not need want cursors everything. Specialized displays don't need all the widget styles Redundant features: We don't really need: four sets of XML classes, two JavaScript engines, two ways to access networked resources QConfig lets you remove features from an embedded build

Cutting Out Features Inappropriate features: Configuring Qt for Embedded Linux: Classic dialogs too large for small screen devices Menu bars, dock windows follow the wrong paradigm On desktops, we want as many features as possible... Unnecessary features:...but......on Devices embedded with touch devices, screens we might don't not need want cursors everything. Specialized displays don't need all the widget styles Redundant features: We don't really need: four sets of XML classes, two JavaScript engines, two ways to access networked resources QConfig lets you remove features from an embedded build

Cutting Out Features Inappropriate features: Configuring Qt for Embedded Linux: Classic dialogs too large for small screen devices Menu bars, dock windows follow the wrong paradigm On desktops, we want as many features as possible... Unnecessary features:...but......on Devices embedded with touch devices, screens we might don't not need want cursors everything. Specialized displays don't need all the widget styles Redundant features: We don't really need: four sets of XML classes, two JavaScript engines, two ways to access networked resources QConfig lets you remove features from an embedded build

Finishing Up PyQt makes it possible to Write code that works on different (embedded) platforms Despite allowances for differences between devices You get to work around those at a high level Prototype applications on the desktop Python makes it possible to Ignore problems like cross-compiling Build on top of existing pure-python code Write portable, deployable applications Take advantage of interactivity to prototype on devices

Finishing Up PyQt makes it possible to Write code that works on different (embedded) platforms Despite allowances for differences between devices You get to work around those at a high level Prototype applications on the desktop Python makes it possible to Ignore problems like cross-compiling Build on top of existing pure-python code Write portable, deployable applications Take advantage of interactivity to prototype on devices

Resources Qt http://www.qtsoftware.com/ PyQt http://www.riverbankcomputing.com/ PyQt and PyKDE Wiki http://www.diotavelli.net/pyqtwiki/ Develer http://www.develer.com/ Rapid GUI Programming with Python and Qt by Mark Summerfield