Sul piano concettuale, vanno molto bene insieme. Ho scritto un programma python/qml/js/opengl che combina tutto abbastanza bene. Era con Qt4.7 e PySide.
Se si sta semplicemente utilizzando QML, è possibile ridurre al minimo la quantità di Qt a cui è necessario essere esposti (sebbene, come sempre, più conoscenze rendano più potenti). Essenzialmente, una volta che hai una qdeclarativeview, il tuo lavoro di Qt è fatto a parte la gestione del segnale/slot, che è una gioia sotto PySide. Suggerirei di essere produttivi rapidamente usando Python e QML senza preoccuparsi troppo del lato Qt delle cose, raccogliendolo come necessario.
Per esperienza, suggerisco di rendere chiara la demarcazione tra Python e QML nella propria mente. Ho limitato molto il QML alla logica della GUI, cosa che fa molto bene; in effetti il QML gestisce come l'interfaccia risponde agli input e quindi invia segnali al programma principale. Funziona un po 'come creare un'interfaccia di base molto semplice tra il gui e il resto del programma, solo segnalando la logica di alto livello (piuttosto che, ad esempio, inviando un clic, invierebbe un segnale che dice per esempio " accendi l'elaborazione ", il gui si occuperebbe di come rendere quel cambiamento). Nel mio caso, questo è appena collegato direttamente al mio framework MVC, ma puoi farlo come preferisci.
C'è un grosso avvertimento in tutto questo. Lo sviluppo di PySide è piuttosto in stallo e attualmente non supporta Qt5 e tutta la sua bontà di miglioramento QML. Ci sono state varie discussioni su come dovrebbe essere supportato, ma non molto impegno sul codice reale.
Credo che PyQt supporti Qt5, ma con licenza doppia come GPL o commerciale (PySide è LGPL quindi può essere utilizzato con codice sorgente chiuso). Non ho esperienza di PyQt, a parte il fatto che PySide è approssimativamente in calo nelle sostituzioni per l'un l'altro.
Modifica: Sembra che sto parlando di usarlo come MVVM.
Modifica (qualsiasi domanda con limitazioni): l'intero Qt è esposto tramite PySide e PyQt. Ciò significa che puoi scrivere estensioni in Python come faresti in C. Ho scritto un widget che ha catturato gli eventi di scorrimento del mouse in modo da poter rubare lo scroll da un Flickable. Questo era un elemento QML creato in Python, anche se dovevo caricarlo anche da Python; Non riuscivo a capire come creare un'estensione che potrei caricare dall'interno del documento QML. Ovviamente è possibile scrivere un'estensione C che è indipendente dal codice principale, quindi hai sempre quell'opzione.
Perché non lo tenga a JS: basta un linguaggio dinamico e JS offre prestazioni migliori rispetto a Python. Per Qt è necessario C++ per estendere QML e JS per unire i componenti QML. Python in questo contesto è uno strumento ridondante. – dtech
Si può estendere QML con componenti Python. Secondo l'argomento della ridondanza, tutte le lingue tranne l'assemblatore sono ridondanti. JS e Python sono distintamente non equivalenti. Avere una logica di programma seria al di fuori di QML è potenzialmente un'ottima cosa. –
@ddriver, come ho detto nella domanda, per stabilire una comunicazione con il sistema operativo per alcuni problemi specifici abbiamo bisogno di un linguaggio di base. Quindi, preferisco Python come Im poco familiare. – inblueswithu