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

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

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

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

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

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

плюсы:

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

минусы:

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

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

плюсы:

  • С# (мне нравится, особенно по сравнению с 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) и требуют некоторого времени для получения опыта, поэтому:

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

Ответ 1

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

компиляция, распространение и развертывание сложнее?

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

нет опыта QT

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

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

Конструктор QT не так хорош, как дизайнер Winforms Visual Studio

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


PS:

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

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