GUI multi piattaforma con core Python / C ++

-1

Sono consapevole dell'esistenza di diversi thread sull'argomento, ma cerco un'esperienza nuova e pratica, che non sono stato in grado di trovare.

Ho un'applicazione scritta in C ++ (core, algebra lineare e elaborazione immagine) e python (interazione con il sistema operativo, ovvero salvataggio di file di testo, produzione di grafici, ecc.). I due sono incollati insieme a SWIG , uno strumento fantastico che consiglia ampiamente.

Voglio scrivere una GUI per tutti i principali SO (macos, Linux e windows) per aiutare l'utente a interagire con l'applicazione, evitando all'utente di modificare direttamente lo script python. Utilizzando questa risposta e kivi come una libreria, o pyQT. Poi, come succede di solito, ho parlato con un amico e mi ha suggerito di andare per Electron o / e photon, e javascript per la GUI. Supporto SWIG anche javascript, quindi ho potuto creare associazioni anche per Javascript, V8 e node.js

Più in dettaglio: la mia applicazione è uno script python che è fondamentalmente usato come un file di configurazione. All'interno dello script python vengono chiamati diversi metodi delle classi C ++ con vari parametri che l'utente può modificare. Attualmente l'utente è obbligato a modificare lo script python, e mi piacerebbe andare per una GUI più user-friendly con alcuni slider, ecc. Un'altra ragione per cui uso python è leggere file esterni, per lo più csv-like, analizzarli e usarli chiamare i metodi C ++. Le classi C ++ sono compilate con gcc / clang / MSVC e poi sono avvolte in alcuni python da SWIG. Nessun multithreading, e non ho intenzione di implementarlo in futuro. Mi interessa, per i piani futuri, includere alcuni oggetti OpenGL nella GUI, e per questo un approccio basato sul Web, con WebGL e forse three.js, potrebbe essere utile poiché ho già un po 'di codice per questo.

Tempo: idealmente l'utente avvia la GUI, imposta i parametri, preme un pulsante, attende più o meno 30 secondi e poi guarda i risultati. Forse l'utente lo farà più di una volta.

C'è una strong argomentazione per andare in entrambe le direzioni? Sto pensando di creare un'app di test da valutare, ma come posso misurare le prestazioni di entrambi gli approcci?

    
posta BiA 27.06.2017 - 16:25
fonte

1 risposta

0

È una questione di opinione.

Quindi la tua scelta è tra una GUI basata sul web (usando forse electron o photon - e non conosco nessuno di questi - ma dovresti anche considerare libonion o Wt o altre librerie client HTTP direttamente utilizzabili da C ++) e una GUI basata sul desktop nativo con Qt .

I want to write a GUI for all the major OS (macos, Linux and windows) to help the user to interact with the application

Devi innanzitutto essere consapevole che sia le GUI desktop (à la Qt) che le GUI Web sono basate su loop eventi . Il loop stesso è generalmente fornito dalla libreria GUI, quindi il flusso di controllo è gestito da quella libreria, non dal programma principale. E il ciclo della GUI viene eseguito molto spesso (non dovresti avere, nel thread principale, qualche elaborazione avviata dalla GUI che dura più di qualche decimo di secondo, in particolare con le interfacce grafiche desktop -non).

Un altro punto è che le vere applicazioni web dovrebbero essere consapevoli della sessione ed essere in grado di gestire diversi client (cioè diversi browser) contemporaneamente.

Suggerirei di rendere l'applicazione un'applicazione Qt (supponendo che solo un utente lo utilizzerebbe) in C ++. Probabilmente è più semplice. Tieni presente che la GUI deve essere eseguita nel thread principale.

Inoltre, qualsiasi approccio basato su Javascript richiede di padroneggiare un altro linguaggio di programmazione.

But how can I measure the performance of either approach?

Un approccio basato su Qt (con il tuo codice Qt-comportamentale in C ++ e qualche codice C ++ generato da strumenti Qt) è probabilmente (a parità di altre condizioni) più veloce da eseguire. Tuttavia, probabilmente dovresti preoccuparti più del tempo di sviluppo (umano) che del runtime di esecuzione (computer).

PS. Forse electron e photon sono altri framework per desktop GUI sopra l'atom atom per node.js; allora quello che ho detto su Qt li sta ancora a cuore. Tuttavia, apparentemente li codificherete usando Javascript e non C ++

    
risposta data 27.06.2017 - 16:39
fonte

Leggi altre domande sui tag