IronPython vs PyQt: 选择最适合 Windows 应用程序开发的工具

82 阅读5分钟

Patrick 是 Python 开发的新手,他希望使用 Python 开发 Windows 图形用户界面应用程序。经过一番研究,他发现有两种选择:

  • IronPython + .NET Framework
  • Python + PyQt

他不知道哪种选择更好,他想知道哪种选择具有更多特性(例如,数据库支持等)。除了 .NET 支持外,IronPython 和 Python 之间还有哪些重大区别?哪一种选择更适合 Patrick?

2、解决方案

对于 Patrick 的问题,有多位开发者给出了他们的见解和建议:

  • 一位开发者分享了他自己的经历,他最初也面临着同样的问题,经过深思熟虑,他决定使用 IronPython/C#/.Net。他认为 Qt 很好,但当 Qt 被卖给诺基亚时,他感到有些不安,因为他无法确定诺基亚拥有 Qt 的目标是否与他开发 Windows UI 的需求一致。不过,诺基亚已经做出了一些积极的举措,例如合并独立平台许可证并放弃 GPL 许可证,转而采用更友好的 LGPL 许可证。在技术上,Qt 设计精良,但它严重依赖难以调试的 C# 宏。这位开发者认为 Qt 最好的地方在于它是开源的,如果需要,你可以对其进行修复。他还没有直接使用过 PyQt,但 PyQt 已经存在了很长时间。

  • 另一位开发者分享了他对 PyQt 和 IronPython 的看法。他认为 PyQt(作为 Qt 的接口)和 IronPython(作为 WinForms 的接口)各有优缺点。它们都是底层平台的“绑定”。PyQt 实际上是从 Qt 的 API “自动生成”的,由于在 Linux 上的使用量很大,因此作为包装器它更为“成熟”。IronPython 则更深入一些,它似乎“重新包装”了系统对象,在 cPython 和 .Net 库之间留下了些许空白(gzip、zip、subprocess 等)。无论是在 PyQt 还是 IronPython 中,都需要通过 Python 深入了解工具包,然后问自己是否喜欢该工具包。Python 只是将工具包的 API 重新打包到对象中。同样,忘记了 Python 这一层面,看看底层的工具包 API,然后想一想自己是否可以使用它。这位开发者个人认为 Qt 的 API 具有 C++ 的性质,对于 Python 程序员来说过于陌生,无法接受。C# 和 Python 非常相似,如果从 C# 中删除花括号和类型声明,你无法知道它是 C# 还是 Python。因此,对于 Python 程序员来说,MSDN 和其他地方提供的基于 C# 的 .Net API、代码和示例几乎可以立即适用,只需做一些非常小的调整。最终,更正确的比较应该是 PyQt(Qt 的 cPython 绑定)和 Win32py(cPython 的 Windows ABI 绑定)。IronPython 几乎是在不同平台上重新发明了相同的语言,伴随着语言移植而带来的所有问题(缺乏功能)。

  • 还有一位开发者认为,首先,开发 Windows GUI 应用程序不止两种选择(Python 还有很多其他 GUI 库),但让我们暂时假设只有这两个选择。如果目标是 Windows GUI 应用程序开发,那么他会选择 .Net。.Net 备受尊敬,有很多面向 .Net 程序员的工作岗位,而且它的 Windows 中心性质(我知道有 Mono,但事实依然如此)意味着你不需要考虑三套及以上用户期望的细节。如果目标是学习广泛使用的 Python 库和技术,他会选择 PyQt(并且最近也确实这么做了)。它是跨平台的,备受尊敬,并且拥有庞大的社区。但你将失去在这个项目中学习 .Net 平台的机会。这位开发者认为,无论哪种方式,只要目标是学习,都不可能输。如果你的目标是完成某件事,请考虑该项目的长期计划以及它从长远来看会如何发展。你是否想要与 Windows 用户界面很好地集成且使用标准小部件的东西?是否想要未来可以轻松地适应其他平台的东西?

  • 第四位开发者认为 PyQt 是一个很棒的库,但 .NET 是在 Windows 上开发的最佳方式。这是因为你可以使用 Python 中任何可以使用的 C# GUI 控件。此外,除了 WinForms 之外,IronPython 还可用于创建美观的 WPF 应用程序。

  • 最后一位开发者表示他还没有使用过 IronPython 与 .NET 的组合,但他写过很多 PyQt 代码。从他的经验来看,PyQt 是一个很棒的库。它是 Qt 的非常优秀的绑定,而 Qt 是一个非常有名且广泛使用的库。由于你编写的是标准 Python 代码,因此你可以享受所有 Python 标准库,这为你提供了大量功能,此外还有几个导入 PyQt 的有用的 Qt 模块。编写 PyQt 代码很有成效,GUI 美观且响应迅速。而且你不能忽略它的可移植性优势:只需做最小的修改(如果有的话),就可以在 Linux 上运行这些程序,而且它们可以正常工作。

3、代码例子

在本文中,我们只是对 IronPython 和 PyQt 进行了比较,没有提供代码例子。如果您想了解这两种技术的具体使用方法,可以参考以下资源: