PySide
-
Upload
openbossa -
Category
Technology
-
view
5.016 -
download
0
description
Transcript of PySide
PySidePython Bindings for the Qt FrameworkMarcelo Lira - setantaMarch, 10th / Manaus - AM
Prologue
Who Am I?
• Paid Open Source developer (lucky me!)• Computer Engineering Undergrad• I like Python but code mostly in C++(it’s the "binding developer paradox")
• PySide / PyMaemo teammember at INdT
WhoWe Are?
• INdT - Instituto Nokia de Tecnologia• openBossa - INdT’s open source stream• Known projects: Canola, Carman, PyMaemo• Friends of Qt Development Frameworks / KDE
Qt Labs Americas
• openBossa initiative• Development of Qt and KDE communities on theAmericas
http://qtlabs.openbossa.org
Python
"Python is the best language ever invented!" -- me
import antigravity
Qt Frameworks
Cross-platform application development framework.
A little while after Nokia’s acquisition of Trolltech Qt started beingdistributed under the LGPL license.
Today’s Topics
• PySide• Binding Generation• Current Status• Future
PySide == Python + Qt
PySide is how we call the Python bindings of the QtFramework produced by INdT/openBossa/Qt LabsAmericas and released under the LGPL license.
PySideMotivation
Python bindings for Qt under the LGPL license, alignedwith the new licensing of Qt.
Make the Qt-Python bindings fithand-in-glove on the Maemo platformand devices.
Because we are the INdT.
PySide Overview
• PySide: the thing that you import• libpyside: takes care of Qt signals/slots• libshiboken: helps interfacing Python with C++
Binding Assembly Line
• Qt Headers: the basic information about Qt libraries comesfrom here.
• Type System files: here the binding developer modifies thecollected information to fit the Python language.
• Handwritten code: code to handle the C++ idiosyncrasiesthat could appear.
AndWhy Not...?
• Cython• ctypes• Swig• SIP• SMOKE• Boost.Python• My favorite technology...
Binding Generation
PySide Goals
Besides delivering LGPL Python bindings for Qt, ourother important goal was to deliver the completebinding factory.
fishes + fishing rodor
PySide + Binding Generator
And we care about your fishing skills too, so we try todocument every part of the system.
Binding C++ libraries
Things one must take care in the binding business:• C++ object to Python wrapper association
• Inheritance
• Multiple inheritance and casting pointers
• Implicit type conversions
• Methods with multiple signatures
• Protected methods
• Function arguments that return values
• Virtual method overrides
• Object ownership
Shiboken
• Shiboken is the binding generator used to createthe PySide bindings.
• It can generate bindings not only for Qt, but forany C++ library.
• The word means nothing at all. I was trying toremember some name and instead of returning anempty string my brain made that up.
Shiboken
Ok, if you really need a meaning...
• Shi: Death
• Bo: Something, someone or somewhere
• Ken: Sword
(Disclaimer: I don’t know Japanese.)
Binding Generator Pedigree
Boost.Python
The code created by the first Python binding generator usedBoost.Python as sugar coating over the C Python API.
In the beginning it was good because:
• Quick start
• Runtime speed
Nevertheless, there was a bad part that showed up later:
• The size problemtemplates over templates over templates ==huge binaries
• Lack of flexibilityindirect access to the C Python API became aproblem when flexibility was needed.
Binding Assembly Line (Again)
• API Extractor: collects information from library headers, merges it withthe modifications and handwritten code defined in the type systemdescription.
• Generator Runner: dynamic loader of generator front-ends.
• Shiboken: generator front-end that outputs CPython source code.
libshiboken
Bindings generated with Shiboken will also needlibshiboken (which is LGPL, by the way).
libshiboken helps with:• Association of C++ objects
with Python wrappers• Multiple inheritance• Implicit type conversions• Virtual method overrides• Object ownership
The Type SystemDescription
<typesystem package="sample">
<primitive-type name="int"/>
<primitive-type name="Complex" target-lang-api-name="PyComplex">
<conversion-rule file="complex_conversions.h"/>
<include file-name="complex.h" location="global"/>
</primitive-type>
<namespace-type name="SampleNamespace"/>
<value-type name="Number" />
<value-type name="SimpleFile">
<modify-function signature="open()">
<modify-argument index="return">
<remove-argument/>
</modify-argument>
<inject-code class="target" position="end" file="simplefile_glue.cpp"/>
</modify-function>
</value-type>
</typesystem>
Current Status
Getting Rid of Boost.Python
Die Boost.Python!
Die!
Working Qt Modules
• QtCore
• QtGui(almost done)
• QtNetwork and QtSvg(community effort! Go cgoncalves!)
• QtWebkit
• QtTest
And NowWhat?
• Bug FixingA couple of important generator bugs must befixed.
• ReleaseWe intend to release the Shiboken generatedPySide in a month from now.
Future
Better Generation Process
Help others to help themselves.
• A tool to quick start binding development.• A visual binding creation/editing tool.(Perhaps a QtCreator plugin.)
The Other Side
Our focus is on Maemo but there are other worlds wecare about.
• Linux Distros: were taken care by the community(Cheers to odyx! And to chaz6 for the build patches.)
• MacOS X: it needs a little love. Anyone with a goodheart and a white laptop?
• Microsoft Windows: some work is already done,but still needs love. Lovers?
Pythonization
One of PySide requisites was to beAPI compatible with PyQt4.
But we want to make PySide’s API more Pythonic.
Great, but... what makes something Pythonic?
What is good?What is right?What is real?
PSEPs
PySide Enhancement Proposals
• Inspired by Python’s PEPs.
• Discussed with the community.
Questions?
Directions
www.pyside.org
http://lists.openbossa.org/listinfo/pyside
#pyside at Freenode
http://qt.gitorious.org/pyside
Marcelo Lira (setanta)[email protected]
Thanks
:)