Does Python go well with QML (Qt-Quick)?

Question:

I am a beginner in Qt-Quick.
I am not aware of Qt which is a basis for QML.
And also I’m not familiar with C++ which is again main supported language for both Qt and QML.
I’m aware JS can do a lot of logic in QML layer itself. But if we need interactions with OS, then we have to use some base language. As I’m comfortable with Python, I m planning for “QML-JS-Python” combination.

So, My questions:

  1. For advanced Application and Game development Does Python & Qt-Quick do well hand in hand?
  2. Is my Combination Trio (QML-JS-Python) is good enough for this?
  3. And do I need to learn Qt for App development for coupling with Python from QML?
  4. If yes for Qust 3 then should I learn complete Qt or Only those few lines of code which stands as communication door between Python and QML?

Sorry If I’m dumb in posing these Questions. But I would like to take suggestions and opinions .

Edit: Any Limitations for this Combination QML-JS-Python

Thanks in Advance

Asked By: inblueswithu

||

Answers:

On a conceptual level, they go together very well. I’ve written a python/qml/js/opengl program that combines everything fairly nicely. That was with Qt4.7 and PySide.

If you’re just using QML, you can minimise the amount of Qt you’ll need to be exposed to (though, as always, more knowledge makes you more powerful). Essentially, once you have a qdeclarativeview, your Qt work is done apart from the signal/slot handling, which is a joy under PySide. I would suggest that you can be productive quickly using Python and QML without worrying too much about the Qt side of things, picking it up as necessary.

From experience, I suggest making the demarcation between Python and QML clear in your own mind. I restricted the QML very much to GUI logic, which is does very well; in effect the QML handles how the interface responds to inputs, and then it sends signals back to the main program. It works a bit like creating a very basic, pared down interface between the GUI and the rest of the program, only signalling high level logic (rather than, for example, sending back a click, it would send back a signal saying for example "turn on the processing", the GUI would deal with how to render that change). In my case, this just plugged straight into my MVC framework, but you can do it how you like.

There is one big fat caveat though in all this. The development of PySide has rather stalled and currently doesn’t support Qt5 and all its QML improvement goodness. There have been various discussions about how it should be supported, but not much actual code committed.

I believe PyQt supports Qt5, but dual licensed as either GPL or commercial (PySide is LGPL so can be used with closed source code). I have no experience of PyQt, other than it, and PySide being approximately drop in replacements for one-another.

It seems like I’m talking about using it as a MVVM.

(any limitations question): The whole of Qt is exposed through PySide and PyQt. This means you can write extensions in Python as you would in C. I wrote a widget that captured mouse scroll events so I could steal the scroll from a Flickable. This was a QML element created in Python, though I also had to load it from Python; I couldn’t quite work out how to create an extension that I could load from inside the QML document. It’s possible of course to write a C extension which is standalone to your main code, so you still always have that option.

Edit: PySide2 is now a thing and supports Qt5.

Edit2: As of 2021, Pyside is now known as QT For Python , and is very much supported up to and including QT6. Make sure you keep a note of the license.

Answered By: Henry Gomersall

As of April 2016 PySide is now officially supported by the Qt Company.

The official home page is here. LGPL licensing is an option, which seems to be the main reason the project was created in the first place.

Answered By: kashiraja

1. For advanced Application and Game development Does Python & Qt-Quick do well hand in hand?

cant see why would you do game development with QT but with python this would probably be redundant overhead.
as for "advanced Application" IMO python would be a great boost because you can create dynamic stuff relatively easily, there is a caveat though, PySide is not very well integrated with qml even though there was a major proggress in PySide 6.3 it is not as polished and documented as with c++,
also the python API is not very pythonic.


2. Is my Combination Trio (QML-JS-Python) is good enough for this?

For a "advanced Application" IMO no
as soon as you will squeeze the juice out of qml you will soon realize you need some custom Items and you would be needing C++ for that for two reasons:
A: Speed, python in qml property bindings are key-concept and if you have a lot of properties in python you will pay the cost.
B: as i stated above the integration of python with qml is not complete.
you can create afterwards your own binding for the c++ components you have created, using something like shiboken.


3. And do I need to learn Qt for App development for coupling with Python from QML? should I learn complete Qt or Only those few lines of code which stands as communication door between Python and QML?

qml and qt-widgets shares a lot in common but i think you can just start with qml and qt-core

Answered By: ניר
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.