老生常谈,简单聊聊 PyQt、PySide、PythonQt 都是什么东西...
如果只有两个的话,估计大家更容易理解
- PyQt:为Python程序添加C++ Qt库支持
- PythonQt:为C++ Qt程序添加Python脚本支持
但为什么多了一个PySide?其实这个是给像我这样——不喜欢盗版,也不喜欢GPL协议——的个人或小公司的福利。当然还希望有钱的公司还是要多支持Qt商业版本,便于其良性发展。
对比
先简单列个表
特性/维度 | PyQt | PySide (Qt for Python) | PythonQt |
---|---|---|---|
开发者 | Riverbank Computing | The Qt Company | MeVis Medical Solutions |
最初发布 | 1990年代后期 | 2009年(最初版本),2018年重新作为“Qt for Python”发布 | 2008年左右 |
许可 | GPL 和商业许可 | LGPL和商业许可 | LGPL |
功能 | 完整支持Qt框架 | 完整支持Qt框架 | 功能有限,主要用于嵌入式Python解释器 |
工具 | SIP | Shiboken | qtscriptgenerator |
文档和教程 | 丰富的文档和教程 | 官方文档逐渐完善,紧跟Qt官方文档 | 文档较少,资源有限 |
生态 | 历史悠久,社区活跃 | 逐渐吸引更多用户 | 小众,主要在特定领域有使用 |
PyQt
- https://www.riverbankcomputing.com/software/pyqt/
- https://en.wikipedia.org/wiki/PyQt
- https://github.com/Python-SIP/sip
PyQt由Riverbank Computing公司开发,最早版本发布于1998年,历史悠久,社区活跃。
为了完成C++库到Python的绑定,该公司开发了SIP工具,这个工具本身采用BSD授权。
注意:PyQt 采用 GPL 和 商业 双重授权,不支持LGPL。要商用的话,需要先购买授权!
PySide
在Qt支持LGPL之后,因为PyQt不采用LGPL,所有才有了采用LGPL新的项目:PySide。
- https://www.qt.io/qt-for-python
- https://wiki.qt.io/Qt_for_Python
- https://en.wikipedia.org/wiki/PySide
- https://code.qt.io/cgit/pyside/pyside-setup.git/
2009年,我从wxpython转向Qt,就是因为Qt和PySide先后增加了LGPL授权。不过我想不通: 自从和Nokia分家后,Qt官方一直在C++ Qt中淡化LGPL,为什么这时会选择在Qt5.12时复活PySide这一和PyQt高度重合的项目。
诞生与死亡
2008年,Nokia 收购Qt,立即着手给Qt(4.5)增加 LGPL 授权。但是此时PyQt的开发商,不同意同步增加LGPL授权,于是乎,为了推广Qt,当时财大气粗的Nokia MeeGo计算机小组,赞助位于巴西的OpenBossa INdT(Nokia Technology Institute)小组开发采用 LGPL 协议的新的Python绑定,这边有了 PySide。
2009年8月18日,LGPL版本的PySide发布(最初采用Boost的python库进行C++到python的封装,后来改为自己的shiboken)。
2011年8月22日,因为Nokia与微软结盟开发手机操作系统,使得Nokia与Intel联合研发的MeeGo系统遭受重创。进而PySide缺少资金来源(开始发公告,并躺平等死)。
重生
2015年,Christian Tismer开始将PySide从Qt4移植到Qt5。取名PySide2。
2018年,Qt5.12发布时,Qt官方正式同步发布PySide2,商业推广名字 Qt for Python。
2020年,发布PySide6,版本号命名上开始和Qt主版本号一致。
PythonQt
PythonQt 的开发始于2006年,由MeVis Medical Solutions开发。它与PyQt定位不同,设计初衷是为嵌入到C++ Qt应用程序中,以便于为其提供脚本支持。
它使用Qt官方的qtscriptgenerator,这是QtScript的生成器,随着QtScript被放弃(Qml/QJSEngine取代)已经不再活跃。
MeVis Medical Solutions AG 是一家专注于医疗成像软件的公司,总部位于德国。 该公司致力于为医疗领域提供先进的图像处理和可视化解决方案,特别是在帮助医疗专业人员进行诊断、手术规划和治疗监控方面。
这个项目还活着,但是不活跃,因为它能做的事情,PySide/PyQt也能做,只是不如它轻便一点。
参考
暂时放这儿