用于跨平台应用程序的Python + QT,Windows Forms或Swing?

Mar*_* S. 11 c# python java user-interface cross-platform

我想开发一个小型/中型跨平台应用程序(包括GUI).

我的背景:主要是带有MVC架构的Web应用程序,包括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#,(流畅)NHibernate,System.Data.SQLite

优点:

  • C#(我喜欢它,特别是与Java相比,希望获得更多经验)
  • Visual Studio中的Winforms GUI设计器看起来非常流畅
  • 智能感知
  • ClickOnce部署(?)
  • Windows窗体在Windows上看起来很好看

缺点:

  • (流畅)NHibernate远没有SQLAlchemy那么有记录; 同样令人讨厌的是:Fluent docs引用的是NHibernate文档,它指的是Hibernate(aargh!).但简单的NHibernate + XML看起来不太舒服.
  • Windows Forms在Linux/Mac OS上看起来不像原生(正确吗?)
  • .NET世界中的开源库越少,OSS用户越少,一般文档就越少
  • 没有WinForms和NHibernate的经验

3)JVM,Java + Jython,Swing,SQLAlchemy
(我在情感上偏向于这个,但为了完整性而列出)

优点:

  • JVM/Swing可以作为跨平台的基础
  • Jython的
  • SQLAlchemy的
  • 很多开源库

缺点:

  • Swing看起来很难看并且难以布局
  • 缺乏一个优秀的GUI设计师
  • 猜测我无法避免Java用于UI的东西
  • 不确定Jython/Java集成的稳定性

(我排除的选项......只是为了避免讨论这些):
- wxWidgets/wxPython(现在QT是LGPL)
- GTK/PyGTK

最终应用程序的外观对我来说非常重要.上面的技术堆栈是非常不同的(PyQT,.NET WinForms,JVM Swing),需要一些时间才能熟练,所以:

您会推荐哪种替代方案?为什么?

小智 5

我是一个Python人,自己使用PyQt,我可以完全推荐它.关于你的缺点:

编译,分发和部署比较困难?

不,不是真的.对于许多项目,setup.py例如cx_Freeze 的完整可以少于30行,很少需要更改(大多数import依赖项是自动检测的,只需要指定几个无法识别的模块),然后python setup.py将构建一个独立的可执行文件.然后你可以像C++ .exe一样分发它.

没有QT经验

当我开始使用Qt(只有一点摆弄Tkinter)时,我没有显着的GUI体验,但我渐渐喜欢Qt.大多数时候,所有小部件都可以无缝地工作并完成它们应该做的事情 - 并且它们有很多用于许多目的.你可以命名,可能有一个小部件可以做到这一点,并且不会因为半成品而烦扰用户.我们被宠坏的所有好东西都在那里.

Qt 巨大的,但PyQt文档通过合理的搜索工作回答了大多数问题.如果所有其他方法都失败并且你知道一些C++,你也可以查看Qt资源.

QT Designer不如Visual Studio Winforms设计器好

我不知道VS Winforms设计师,但我必须承认Qt Designer缺乏.我最终在设计器中制作了UI的草图,生成代码,清理它并手动处理所有剩余的细节.到目前为止一切正常,但我的项目相当小.


PS:

(现在QT是LGPL)

PyQt仍然只是GPL.PySide是LGPL,是的,但如果这是一个问题,它就不那么成熟了.该项目网站指出,"现在开始开发PySide应该是非常安全的".