Python - GUI QT e richiamare form

Pubblicità
certo, desktop e mobile avranno differenti forme di utilizzo

Se al 90% sono diverse, non ha senso farsi venire i mal di testa per cercare un tool che li accomodi entrambe. Se sul desktop puoi usare Electron, sul mobile puoi usare Flutter. Questo sempre perchè non esiste ad oggi un tool che funzioni bene bene sia su mobile che su desktop.

Pensavo a Python e freeze oppure un runnable Jar con Java, (Xamarin tra l' altro è open a livello commerciale?), mentre C++ e QT non mi ispira molto per C++

Il tuo problema non è il linguaggio ma un widget toolkit e preferibilmente un toolkit che astragga alcune funzionalità di base ( camera? touch? ). Python è una mazzata da far girare su mobile. QT non è solo C++ ma anche Python e altri linguaggi.

Per mobile, anche Kivy non è malissimo (anche se probabilmente è più per giochi o cose del genere)

Kivy manca di un widget toolkit avanzato. Per i giochi va benissimo, per le app ti devi costruire l'UI da solo.

Cordova e HaXe, probabilmente i più usati, creano direttamente apk e ipa?

HaXe genera app nel formato preferito della piattaforma di destinazione. Cordova pure ovviamente, ma Cordova è un browser con dentro un sito web. Le prestazioni vanno a farsi friggere. A questo punto usa React Native che fai prima e meglio.
 
L' idea era per PyQT su desktop e qualche strumento su Mobile
Con kivy si può sfruttare qualche frammento già scritto in Python
Xamarin con Xamarin.Forms sicuramente è più performante (bisogna registrarsi per scaricare/utilizzare Xamarin? E' open-source anche se si usa a livello commerciale?)
 
L' idea era per PyQT su desktop

Buona scelta.

Con kivy si può sfruttare qualche frammento già scritto in Python

La logica di business.

Xamarin con Xamarin.Forms sicuramente è più performante (bisogna registrarsi per scaricare/utilizzare Xamarin? E' open-source anche se si usa a livello commerciale?)

Più performante non direi. Il problema sono i bug. E onestamente i forms fanno tanto anni '90, si perde tutto l'ambaradan dei widget toolkit moderni. Almeno hanno avuto l'idea di buttare nel mix Xaml.

Che io sappia Xamarin è free per qualsiasi uso. Solo che nella versione free mancano alcune caratteristiche enterprise.
 
è così pessimo Xamarin?
A sto punto C++ e QT per mobile? E' C++ che ormai è un pò "vecchio"
 
è così pessimo Xamarin?

Fatti un giro sui forum MS e vedraI quante segnalazioni di bug. Quando l'ho provato io aveva parecchi bug e abbastanza gravi.

A sto punto C++ e QT per mobile? E' C++ che ormai è un pò "vecchio"

Puoi benissimo usare Flutter che è un framework ottimo. E comunque C++ non è vecchio. L'ultimo aggiornamento dello standard risale al 2017. Con C+11 il linguaggio è stato pesantemente aggiornato https://en.wikipedia.org/wiki/C++11
 
Quindi C++ e QT è la miglior soluzione "semi nativa"?

Semi? QT usa NDK per compilare l'applicazione direttamente in codice nativo. E' più nativo del SDK di Android. Se poi per nativo intendo usare gli strumenti ufficiali, allora non è nativo.

Ma non pensare che QT sia al livello di React Native o di Cordova, perchè commetteresti un errore gigantesco. Quelle sono tecnologie che sfruttano Javascript/V8 e la webview rispettivamente. QT usa direttamente quanto offerto dal sistema operativo, nel caso di Android le stesse API usate dal SDK. QT implementa i suoi widget e li renderizza. Esattamente come fa Flutter.
 
Android Studio e Java per Android e Xcode e Swift per iOS sicuramente sono la scelta migliore
Nel caso però di app con molto codice o aggiornate di frequente, pensare, sviluppare e testare due codici può diventare pesante
Pensavo di utilizzare Virtuabox cloud per lanciare una VM che esegue codice riferito all' analisi web
Quando necessario tramite app ci si interfaccia alla VM su cloud per analizzare i risultati prodotti
 
Android Studio e Java per Android e Xcode e Swift per iOS sicuramente sono la scelta migliore

La scelta migliore è quella che ti consente di realizzare il tuo progetto, in maniera produttiva, con meno bug possibili e nel minor tempo possibile.


Nel caso però di app con molto codice o aggiornate di frequente, pensare, sviluppare e testare due codici può diventare pesante

Per questo sono nati framework multipiattaforma.

Pensavo di utilizzare Virtuabox cloud per lanciare una VM che esegue codice riferito all' analisi web
Quando necessario tramite app ci si interfaccia alla VM su cloud per analizzare i risultati prodotti

Cioè un'architettura client/server? Basata su webservice? Ma mi pare che il problema rimanga tale e quale, cioè ci sono delle applicazioni per ogni piattaforma supportata e che devono implementare almeno l'accesso e la visualizzazione dei dati. Per cui si ripropone il problema di quale strumento usare.

E se la tua è una soluzione al code sharing tra le varie piattaforme, sappi che puoi benissimo farlo comunque realizzando una libreria che implementa la business logic e che sarà usata da tutte le applicazioni su ogni piattaforma. Cioè puoi benissimo realizzare un'app Android in Java, una iOS in Swift e avere una libreria scritta in C/C++ che implementa la business logic. O anche usare un transpiler Java->Objective-C ( che esistono ) per convertire il codice Java in Objective-C. O usare un linguaggio come Nim che ha un transpiler C per realizzare la libreria.
 
i transpiler mi hanno sempre creato un pò di apprensione, sono molto "sicuri"?
L' idea era di creare una VM in cloud, con uno script Python per specifiche operazioni di analisi web, memorizzando i risultati in un DB
Quando serve l' app Android o l' app iOS, create con C++ e QT si "collegano" al DB per visionare le operazioni eseguite e i risultati trovati
Puoi fare gentilmente un esempio di business logic e utilizzo Nim?
 
i transpiler mi hanno sempre creato un pò di apprensione, sono molto "sicuri"?

Sicuri? Un transpiler è un software che prende un programma in, che so, Javascript e lo trasforma in C. Poi puoi compilarlo tu stesso.

Puoi fare gentilmente un esempio di business logic e utilizzo Nim?

La business logic è quella che vuoi mettere nella VM. Io invece ti consiglio di realizzarla in un linguaggio supportato da più piattaforme. C++ è in genere questo linguaggio. Molti non sanno che si può aggiungere codice C++ ad un'app iOS o Android.

p.s. ovviamente qualsiasi linguaggio che possa compilare per la piattaforma target va bene. Nim è un'idea, ma non è l'unico. In ogni caso se procedi con l'implementazione di un webservice ti crei solo l'ulteriore onere di dover sviluppare un altro componente software e tirare in ballo qualche altro linguaggio + framework + ...

Ti conviene? Comunque sia la scelta va sempre fatta in base al progetto. Se i client sono solo dei software per visualizzare i dati, allora le prestazioni non sono importanti e lo diventa la possibilità di usare magari lo stesso codice su tutte le piattaforme.
 
Ultima modifica:
con Matlab ad esempio si può aggiungere codice Java direttamente
In Java e Swift si può fare la stessa cosa con C++?
 
In Java e Swift si può fare la stessa cosa con C++?

Swift è interoperabile con C. Java anche con C++. Il punto è che basta creare una libreria con un'interfaccia C-style e puoi interfacciarla con qualsiasi cosa. Per questo C è ancora oggi il re dei linguaggi di programmazione.

E ovviamente esiste la possibilità di tradurre codice Java in Objective-C https://github.com/google/j2objc

E se cerchi trovi altre soluzioni, basate su linguaggi più esoterici come Clojure.

HaXe ad esempio traduce in C#, Java, C++ e altri https://haxe.org/manual/target-details.html
 
l' idea di tornare a C non è entusiasmante, però in effetti se è possibile richiamarlo da Swift e Java. Per caso anche da Python e Php?
In teoria si potrebbe anche programmare su desktop con PyQT e poi "tradurre" il codice Python a Swift e Java
Spark potrebbe bastare per evitare una VM?
 
Ultima modifica:
l' idea di tornare a C non è entusiasmante, però in effetti se è possibile richiamarlo da Swift e Java. Per caso anche da Python e Php?

Non devi ritornare al C. Il C ha imposto a tutta l'informatica precise regole su come deve funzionare l'interoperabilità a basso livello. Mai sentito parlare di calling conventions? ABI? Qualunque linguaggio voglia avere un minimo di successo DEVE implementare un metodo per la FFI che sia compatibile con le regole imposte dal C.

Ma non è che bisogna scrivere le librerie in C. Python c'ha i Ctypes. Swift offre un meccanismo simile. Java implementa JNI.

Poi ci sono linguaggi che sono nati come pezzi di interi ecosistemi, come Java per JVM e C# per .NET. Questi qui sfruttano il fatto che JVM e .NET impongono ulteriori regole e grazie ciò tutti i linguaggi che girano su JVM ( lo stesso per .NET ) possono interoperare. Clojure e Kotlin possono chiamare codice Java come e quanto gli pare. C#, F#, VB.Net, Ironpython possono chiamarsi tra di loro.

In teoria si potrebbe anche programmare su desktop con PyQT e poi "tradurre" il codice Python a Swift e Java

In teoria si può fare qualsiasi cosa. Ed esistono transpiler ( incompleti ) Python -> Java e Python -> Swift. Ma stai facendo una grossa confusione se tiri in ballo PyQT. PyQT NON è un linguaggio ma il nome di una libreria di binding per Python e che linka al framework QT. Cioè un modo per utilizzare QT da Python. Non te la cavi semplicemente traducendo istruzioni Python in Java se poi non hai modo di chiamare le funzioni delle librerie che compongono QT.

Spark potrebbe bastare per evitare una VM?

Questo? http://sparkjava.com/

Quello è scritto in Java e gira sulla JVM. Come pretendi di bypassare la JVM?
 
Pubblicità
Pubblicità

Discussioni Simili

Indietro
Top