Python + QT, Windows Forms или Swing для кросс-платформенного приложения?

Я хотел бы разработать кросс-платформенное приложение для малого и среднего размера (включая графический интерфейс).

Мой опыт: в основном веб-приложения с архитектурой MVC, как Python (Pylons + SqlAlchemy), так и Java (хорошо знают язык, но не очень-то нравится). Я также знаю некоторые C #. Пока у меня нет опыта программирования в GUI (ни Windows Forms, ни Swing, ни QT).

Я планирую использовать SQLite для хранения данных. Это похоже на кросс-платформенное решение и обладает некоторыми мощными функциями (например, полнотекстовый поиск, которого не хватает SQL Server Compact).

Я провел некоторое исследование, и это мои любимые варианты:

1) QT, Python (PyQT или PySide) и SQLAlchemy

плюсы:

  • Язык Python
  • с открытым исходным кодом является сильным в мире Python (множество библиотек и пользователей)
  • SQLAlchemy: фантастический способ взаимодействия с БД и невероятно хорошо документированный!

минусы:

  • сбор, распространение и развертывание сложнее?
  • нет опыта QT
  • QT Designer не так хорош, как разработчик Visual Studio Winforms

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

плюсы:

  • C # (мне нравится, особенно по сравнению с Java и хотелось бы получить больше опыта в нем)
  • Дизайнер GUI Winforms в Visual Studio кажется действительно гладким
  • IntelliSense
  • Развертывание ClickOnce (?)
  • Windows Forms выглядят и чувствуют себя хорошо в Windows

минусы:

  • (Fluent) NHibernate гораздо менее документирован, чем SQLAlchemy; также раздражает: Свободные документы относятся к документам NHibernate, которые относятся к Hibernate (aargh!). Но простой NHibernate + XML выглядит не очень удобно.
  • Windows Forms не будет выглядеть + вести себя на Linux / Mac OS (правильно?)
  • меньше библиотек с открытым исходным кодом в мире .NET, меньше пользователей OSS, меньше документации в целом
  • нет опыта WinForms и NHibernate

3) JVM, Java + Jython, Swing, SQLAlchemy
(Я эмоционально предвзято отношусь к этому, но перечислены для полноты)

плюсы:

  • JVM / Swing хорошо работают как кросс-платформенная основа
  • Jython
  • SQLAlchemy
  • множество библиотек с открытым исходным кодом

минусы:

  • Качели кажутся уродливыми и трудными для макета
  • не хватает хорошего дизайнера GUI
  • Угадаю, что я не смогу избежать Java для работы с пользовательским интерфейсом
  • Не уверен, насколько стабильна интеграция Jython / Java

(Варианты, которые я исключил … просто чтобы не обсуждать их):
– wxWidgets / wxPython (теперь QT является LGPLed)
– GTK / PyGTK

Внешний вид окончательного приложения очень важен для меня. Вышеупомянутые технологические стеки очень разные (PyQT, .NET WinForms, JVM Swing) и требуют некоторого времени для получения опыта, поэтому:

Какой вариант вы бы порекомендовали и почему?

Я парень Python и сам использую PyQt, и я могу полностью рекомендовать его. Что касается ваших минусов:

сбор, распространение и развертывание сложнее?

Нет, не совсем. Для многих проектов полная setup.py например cx_Freeze, может быть меньше 30 строк, которые редко нужно изменять (большинство зависимостей import обнаруживаются автоматически, нужно указывать только несколько модулей, которые не распознаются), а затем python setup.py будет создавать автономный исполняемый файл. Затем вы можете распространять его так же, как, например, C ++ .exe.

нет опыта QT

У меня не было заметного опыта работы с графическим интерфейсом, когда я начал с Qt (только немного возиться с Tkinter), но я полюбил Qt. В большинстве случаев все виджеты работают без проблем и выполняют то, что они должны делать, и их много для многих целей. Вы называете это, вероятно, виджет, который делает это, и не раздражает пользователя, будучи наполовину похожим. Все хорошие вещи, которые мы испортили, есть.

Qt огромен, но документация PyQt отвечает на большинство вопросов с разумным усилием поиска. И если все остальное терпит неудачу, и вы знаете немного C ++, вы также можете посмотреть ресурсы Qt.

QT Designer не так хорош, как разработчик Visual Studio Winforms

Я не знаю конструктора VS Winforms, но я должен признать, что Qt Designer отсутствует. В итоге я создал эскиз пользовательского интерфейса в дизайнере, создав код, очистив его и заботясь о всех остальных деталях вручную. Пока все работает, но мои проекты довольно малы.


PS:

(теперь, когда QT является LGPLed)

PyQt все еще GPL. PySide – LGPL, да, но это не зрело, если это вызывает беспокойство. На веб-сайте проекта говорится, что «запуск разработки на PySide теперь должен быть довольно безопасным».