Python + QT, Windows Forms ou Swing pour une application multiplate-forme?

J’aimerais développer une application multiplate-forme de petite / moyenne taille (y compris une interface graphique).

Mes antécédents: principalement des applications Web avec des architectures MVC, à la fois en Python (Pylons + SqlAlchemy) et en Java (connaissent bien le langage, mais ne l’aiment pas beaucoup). Je connais aussi du C #. Jusqu’à présent, je n’ai aucune expérience en programmation d’interface graphique (ni Windows Forms, Swing ni QT).

Je prévois d’utiliser SQLite pour le stockage de données: c’est une solution inter plate-forme intéressante qui présente quelques fonctionnalités puissantes (par exemple, la recherche en texte intégral, qui manque à SQL Server Compact).

J’ai fait des recherches et voici mes options préférées:

1) QT, Python (PyQT ou PySide) et SQLAlchemy

avantages:

  • Python le langage
  • l’open source est fort dans le monde Python (beaucoup de bibliothèques et d’utilisateurs)
  • SQLAlchemy: Un moyen fantastique pour interagir avec une firebase database et incroyablement bien documenté!

les inconvénients:

  • compilation, dissortingbution et déploiement plus difficiles?
  • aucune expérience QT
  • QT Designer pas aussi bien que le concepteur Visual Studio Winforms

2) .NET / Mono, Windows Forms, C #, NHibernate (Courant), System.Data.SQLite

avantages:

  • C # (j’aime ça, surtout comparé à Java et aimerais avoir plus d’expérience)
  • Le concepteur d’interface graphique Winforms dans Visual Studio semble vraiment lisse
  • IntelliSense
  • Déploiement ClickOnce (?)
  • Windows Forms semble bien dans Windows

les inconvénients:

  • (Courant) NHibernate beaucoup moins documenté que SQLAlchemy; également gênant: les documents Fluent font référence aux documents NHibernate qui font référence à Hibernate (aargh!). Mais NHibernate + XML n’est pas très confortable.
  • Les Windows Forms n’auront pas l’air + se comporteront en natif sous Linux / Mac OS (correct?)
  • Moins de bibliothèques open source dans le monde .NET, moins d’utilisateurs OSS, moins de documentation en général
  • aucune expérience WinForms et NHibernate

3) JVM, Java + Jython, Swing, SQLAlchemy
(Je suis émotionnellement biaisé contre celui-ci, mais répertorié par souci d’exhaustivité)

avantages:

  • JVM / Swing fonctionnent bien en tant que base multiplateforme
  • Jython
  • SQLAlchemy
  • beaucoup de bibliothèques open source

les inconvénients:

  • Swing semble moche et difficile à mettre en page
  • manque un bon concepteur graphique
  • Deviner que je ne pourrai pas éviter Java pour les choses d’interface utilisateur
  • Pas sûr de la stabilité de l’intégration Jython / Java

(Options que j’ai exclues … juste pour éviter les discussions):
– wxWidgets / wxPython (maintenant que QT est LGPLed)
– GTK / PyGTK

L’aspect de l’application finale est très important pour moi. Les stacks technologiques ci-dessus sont très différentes (PyQT, .NET WinForms, JVM Swing) et nécessitent un peu de temps pour devenir efficaces. Ainsi:

Quelle alternative recommanderiez-vous et pourquoi?

Je suis un gars de Python et utilise moi-même PyQt, et je peux le recommander sans réserve. Concernant vos inconvénients:

compilation, dissortingbution et déploiement plus difficiles?

Non, pas vraiment. Pour de nombreux projets, une setup.py complète.py pour setup.py par exemple, peut contenir moins de 30 lignes qu’il est rarement nécessaire de modifier (la plupart import dépendances d’ import sont détectées automatiquement, il suffit de spécifier les quelques modules non reconnus), puis python setup.py construira un exécutable autonome. Ensuite, vous pouvez le dissortingbuer comme par exemple un fichier C ++ .exe.

aucune expérience QT

Je n’avais pas d’expérience graphique remarquable lorsque j’ai commencé avec Qt (seulement un peu de bidouillage avec Tkinter), mais j’ai appris à aimer Qt. La plupart du temps, tous les widgets fonctionnent de manière transparente et font ce qu’ils sont censés faire – et ils sont nombreux pour de nombreuses raisons. Vous l’appelez, il y a probablement un widget qui le fait, et n’ennuie pas l’utilisateur en étant à moitié assommé. Toutes les bonnes choses avec lesquelles nous avons été gâtés sont là.

Qt est énorme, mais la documentation PyQt répond à la plupart des questions avec un effort de recherche raisonnable. Et si tout échoue et que vous connaissez un peu le C ++, vous pouvez également consulter les ressources Qt.

QT Designer pas aussi bien que le concepteur Visual Studio Winforms

Je ne connais pas le concepteur VS Winforms, mais je dois admettre que le concepteur Qt fait défaut. J’ai fini par faire un croquis de l’interface utilisateur dans le concepteur, générer le code, le nettoyer et prendre soin des détails restants à la main. Cela fonctionne bien jusqu’à présent, mais mes projets sont plutôt petits.


PS:

(maintenant que QT est LGPLed)

PyQt est encore uniquement sous GPL. PySide est LGPL, oui, mais ce n’est pas si mature, si c’est une préoccupation. Le site Web du projet indique que “le démarrage du développement sur PySide devrait être assez sûr maintenant”.