PyQt、PySide、PySide2这三者到底有什么区别?

前言

众所周知,Python语言在这两年确实很火,作为一种“胶水”语言,似乎它是万能的,什么都能做,这依赖于它能够支持无数的外部库,这使得Python就变得无比强大。那么身为Qt的开发者,也自然不会放过Python语言的集成了,毕竟它这么牛叉,说不定哪天可以用到项目中来呢是吧,那就必须得提前了解一下了。

那么,面对网上那么多支持的模块:PyQt、PySide、PySide2,到底该用哪一个呢?这几个之间到底有什么区别?

两个不同的玩意儿

首先要明确的最重要的一点就是,PyQt和PySide是两个完全不同的玩意儿,千万别以为这两个都是Qt支持Python或者Python支持Qt,他俩是不一样的,虽然实现的功能都差不多。

PyQt

PyQt要比PySide推出时间早得多,它的开发商是Riverbank Computing,由于推出时间早,PyQt就比较成熟了,并且资料也很完善,最开始是有PyQt4对应的是Qt4版本,后来推出了PyQt5,对应Qt5版本,目前最新发布的版本是PyQt v5.13.0。值得注意的是PyQt的采用的是GPLv3许可证和需要购买版权的商业许可证发布的,该许可证允许开发专有应用程序,可以由开发者选择。GPLv3许可证大概意思就是说,使用PyQt后你的程序就必须要开源,如果闭源商用就会违反协议,后果自负,在国内可能很多公司部注重这个,随便在用,但是如果公司比较有影响力的话,违反协议说不定哪天收到律师函。

PySide

对比PyQt,PySide就要晚的多问世了,由于先前PySide项目不是很完善,又缺乏文档,所以其存在感不高。上面我们说到PyQt的开发商是Riverbank Computing,而PySide就不同了,它是Qt的亲儿子。

当时Nokia(Nokia那时候收购了Trolltech,所以Nokia是当时Qt的爹)和Riverbank Computing谈,希望PyQt能添加对LGPL协议的支持,这对于很多商业用户会更加友好,毕竟PyQt里使用的也是我们LGPL协议版本的Qt,但是Riverbank Computing不同意。

Nokia一气之下决定单干,于2009年8月发布了支持了LGPL协议的PySide,PyQt的对标产品。

LGPL协议是一个商业友好的协议使用 LGPL 协议开发闭源程序,如果你使用动态链接的形式,那么,你可以以任何形式(商业的、非商业的、开源的、非开源的等等)发布你的应用程序。

2011年,Nokia将Qt的商业许可卖给Digia。

2012年,Nokia将Qt完全卖给Digia,后者在2012年年底推出了Qt5。

2015 年 10 月 14 日 PySide 1.2.4 发布,支持 Qt 4.8.7 框架。兼容 Python2.6 2.7 (采用 MSVC2008 构建),兼容 Python3.3 3.4 (采用 MSVC2010 构建)。

反观PyQt,在Qt5推出的半年内(2013年6月)就发布了支持Qt5的pyQt5。

PySide2

PySide对Qt5提供支持的计划也从2014年开始筹备,也就是2015年上马的Qt for Python项目,该项目开发的模块命名为PySide2,以表示与老一代PySide的不同。所以其实PySide2只是PySide的升级版,PySide对标PyQt4,而PySide2对标PyQt5。

总结

总的来说PyQt和PySide2这两者最大的区别就是协议的不同,来自于不同的开发商,但其实这两个如果要修改并兼容的话,改动并不是很大,具体的可以参照Qt官方文档介绍
虽然PyQt发布的早,并且稳定,资料也比较多,而PySide起步比较晚,直到2018年6月正式发布了PySide2的第一个版本,从0到1是最难的一步,后面就容易了,尤其发布的Qt 5.12 LTS释放了非常积极的信号,PySide2已经日趋完善,又是亲生的,还有LGPL开源协议的加持,今后PySide2有足够的理由成为Python开发者使用Qt的第一选择。

参考资料:

https://wiki.qt.io/Differences_Between_PySide_and_PyQt_SimplifiedChinese
https://pypi.org/project/PyQt5/
http://forum.digitser.cn/forum.php?mod=viewthread&tid=2021&highlight=PySide1.2.x+和+PySide2.x
https://www.zhihu.com/question/21237276
https://www.zhihu.com/question/306793447

你可能感兴趣的:(Qt,Qt,for,Python,PyQt,PySide,PySide2,区别)