我开始学习一点Python,现在想尝试一下GUI构建。Qt似乎是一个不错的选择,因为它具有跨平台性。
现在有两个可用的绑定:Riverbank Computing的PyQt和最初由Nokia开发的PySide。
那么我应该选择哪个?我找到的都是两年前的功能比较,但现在有什么区别呢?
哪一个更容易使用,文档是否更全面/更好?两个库都还在积极开发吗?
由于我不打算编写商业应用程序,所以许可证并不是太重要。
我开始学习一点Python,现在想尝试一下GUI构建。Qt似乎是一个不错的选择,因为它具有跨平台性。
现在有两个可用的绑定:Riverbank Computing的PyQt和最初由Nokia开发的PySide。
那么我应该选择哪个?我找到的都是两年前的功能比较,但现在有什么区别呢?
哪一个更容易使用,文档是否更全面/更好?两个库都还在积极开发吗?
由于我不打算编写商业应用程序,所以许可证并不是太重要。
这两个工具包都在积极维护中,现在在功能和质量上几乎相等。只有一些不太重要的差异。
尽管如此,我仍然建议在Python 2中使用PySide。它有一个更合理的API,主要是它不会暴露Qt类型,这些类型在Python中有直接等效物(例如QString、QList等),或者由于Python的动态特性而完全多余,例如QVariant。这避免了许多繁琐的Qt类型转换,从而简化了编程并避免了许多错误。
PyQt也支持这种现代API,并默认用于Python 3,但不适用于Python 2以保持向后兼容性。
还有许可证的差异。PySide是LGPL,而PyQt是GPL。如果您不希望使您的项目开源,这可能会产生影响。虽然PyQt始终有专有版本可供相当合理的价格。
我倾向于发现PySide文档更直观。在我看来,API略微更具Pythonic风格,并且目前的错误修复速度相当令人印象深刻。
PyQt具有Python 3支持和历史优势。对它有更多第三方文档/教程。
我最近将一个重要的代码库(超过8,000行代码)从PyQt迁移到了PySide。
目前我认为PyQt是一个更成熟、性能更好、更稳定的项目。我在PySide中遇到了许多错误,并怀疑任何大型项目都会遇到问题。尽管如此,我向该项目报告了一个错误,它在几周内被修复并发布了新版本。我还遇到一个问题,就是应用程序需要约15秒才能退出。我尚未花时间找出原因。然而,在不久的将来,选择PyQt而不是PySide将没有理由。
如果您现在决定使用PyQt,请确保整个过程使用API v2。它是一个更好的API,将方便未来转换到PySide。另外,如果您要进行迁移,请只需按照PySide wiki上的指南操作。即使对于一个包含约20个源文件的8,000多行代码应用程序,这只需要一个下午的时间。
QString
而不是unicode
,以及QVariant
(基本上只是一个包装器,我相信 - 我从来没有实际使用过它)而不是被包装的。版本2可以在Python 2中启用,并在Python 3中启用,它更好(尽管在许多地方仍然不符合Python规范 - PySide也是如此,但它正在变得越来越好)。与它们仍然存在一些不兼容性; PyQt4有QtCore.pyqt(Signal|Slot|Property)
,PySide有QtCore.(Signal|Slot|Property)
。import pyqt4pysideimporter
和pyqt4pysideimporter.autoselect()
(如该存储库中的main.py
)。之后,您只需import PyQt4
。make_py2exe.py
——一组与py2exe最佳设置相结合再加上UPX压缩),我认为差别大约是8MB而不是9-10MB(也就是包括了完整的Python运行时和我的所有内容),但我无法准确地记住这些数字。在Linux中,代表Python模块的.so
文件的大小,平均要比PyQt4的两倍大。 - Chris Morgan