概念レベルでは、それらは非常にうまく連携します。私はすべてをかなりうまく組み合わせたpython/qml / js/openglプログラムを書きました。それはQt4.7とPySideでした。
QMLを使用しているだけの場合は、公開する必要のあるQtの量を最小限に抑えることができます(ただし、いつものように、知識が増えると強力になります)。基本的に、qdeclarativeviewを取得すると、Qtの作業は、信号/スロットの処理とは別に実行されます。これは、PySideでの喜びです。Qt側のことをあまり気にせず、必要に応じてPythonとQMLを使用して、迅速に生産性を高めることができることをお勧めします。
経験から、PythonとQMLの境界を自分の頭の中で明確にすることをお勧めします。私はQMLをGUIロジックに非常に制限しました。これは非常にうまく機能します。実際、QMLはインターフェイスが入力にどのように応答するかを処理し、メインプログラムに信号を送り返します。これは、GUIとプログラムの残りの部分との間に非常に基本的な簡素化されたインターフェイスを作成するのと少し似ており、高レベルのロジックのみを通知します(たとえば、クリックを返送するのではなく、たとえば「処理をオンにします」、GUIはその変更をレンダリングする方法を処理します)。私の場合、これはMVCフレームワークに直接接続されていますが、好きなように行うことができます。
ただし、これには大きな注意点が1つあります。PySideの開発はかなり行き詰まっており、現在Qt5とそのすべてのQML改善機能をサポートしていません。それがどのようにサポートされるべきかについて様々な議論がありましたが、実際のコードはあまりコミットされていません。
PyQtはQt5をサポートしていると思いますが、GPLまたは商用のいずれかとしてデュアルライセンスされています(PySideはLGPLであるため、クローズドソースコードで使用できます)。私はそれ以外にPyQtの経験はなく、PySideはお互いの代わりにほぼ落ち込んでいます。
MVVMとして使用することについて話しているようです。
(制限に関する質問):Qt全体がPySideとPyQtを介して公開されます。これは、Cの場合と同じようにPythonで拡張機能を記述できることを意味します。Flickableからスクロールを盗むことができるように、マウスのスクロールイベントをキャプチャするウィジェットを作成しました。これはPythonで作成されたQML要素でしたが、Pythonからもロードする必要がありました。QMLドキュメント内からロードできる拡張機能を作成する方法を完全に理解することができませんでした。もちろん、メインコードに対してスタンドアロンのC拡張機能を作成することも可能であるため、常にそのオプションを利用できます。
編集:PySide2はThingになり、Qt5をサポートします。
Edit2:2021年現在、PysideはQT For Pythonとして知られており、QT6までは非常にサポートされています。ライセンスをメモしておいてください。