News

Discover more

使用PySide2开发GUI

  • 发布时间: 2020-09-18 16:44:49
  • 发布人: admin
  • 分类: 物联网技术

1.背景

关于QT与PyQt关系

Qt 是一个跨平台的 C++图形用户界面库,由挪威 TrollTech 公司于1995年底出品。

Trolltech 公司在 1994 年成立,但是在 1992 年,成立 Trolltech 公司的那批程序员 就已经开始设计 Qt 了,Qt 的第一个商业版本于 1995 年推出。

2008年1月31日,诺基亚Nokia公司宣布通过公开竞购的方式收购TrollTech公司,旗下包括Qt在内的技术都归入Nokia旗下。并且Nokia针对自己的移动设备平台规划的需要,将Qt按不同的版本发行。

Qt商业版:提供给商业软件开发。它们提供传统商业软件发行版并且提供在协议有效期内的免费升级和技术支持服务。

Qt开源版:提供了和商业版本同样的功能。它是免费的,使用开源版需要了解其采用的各种开源协议。

例如使用开源版QT需要注意的是,QT开源版的LGPL开源协议:

LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。即: 使用 采用LGPL开源协议的开源版QT,也可以用来开发商业、闭源软件。

2009年3月发布的Qt 4.5 起,诺基亚Nokia为Qt增添开源LGPL授权选择。

2009年5月11日起,诺基亚Qt Software 宣布Qt源代码库面向公众开放,Qt 开发人员可通过为 Qt 以及与 Qt 相关的项目贡献代码、翻译、示例以及其他内容,协助引导和塑造 Qt未来的发展。为了便于这些内容的管理,Qt Software 启用了基于Git 和 Gitorious 开源项目的Web 源代码管理系统 。

Qt专业版和企业版是Qt的商业版本。如果你购买了这些商业版本,你也可以获得技术支持和升级服务。

2013年7月3日,Qt 5.1 正式版发布了,这是 Qt 5.0 发布后经过 6 个月的开发而测试的新版本。主要是修复 5.0 中的 bug,但该版本还包含了很多新特性和一些小改进,详细内容请看 Qt 5.1 launch page。

2019年7月,Qt 5.13版本发布,Qt Creator beta版也更新到了 4.10.0。

(--以上引用baike.baidu.com/item/QT

PyQtPython语言的GUI编程解决方案之一。可以用来代替Python内置的Tkinter。其它替代者还有PyGTKwxPython等。与Qt一样,PyQt是一个自由软件。PyQt是PyKDE的基础。

PyQt的开发者是英国的“Riverbank Computing”公司。与4.5版本之前的Qt一样,它提供了GPL与商业协议两种授权方式,因此它可以免费地用于自由软件的开发。不过目前尚不提供LGPL授权方式。PyQt可以运行于Microsoft WindowsMac OS XLinux以及Unix的多数变种上。

2009年8月,Qt的开发公司诺基亚发布PySide,提供与PyQt类似的功能,但提供了LGPL授权。主要原因是“Riverbank Computing”不愿以LGPL授权发布PyQt。[2]

自4.5版本以后[3],PyQt同时支持Python 2.x与Python 3.x。但是在API方面有所区别,最主要的是运行在Python 3.x下的PyQt不使用QString,而是str。另外,之前为了避开Python 2.x关键词限制的exec_()print_()两个函数现在重新命名为exec()print()

(--以上引用baike.baidu.com/item/QT

关于Riverbank Computing公司,riverbankcomputing.com/

如果您需要使用PyQt进行商业GUI开发,您需要购买PyQt license,如下操作:

购买界面如下:

Buy PyQt

The cost of a commercial PyQt license for a single developer is $550 (USD) £420 (GBP) €450 (EUR) . You may pay in either US Dollars, GBP or Euros.

PyQt does not include Qt itself. You must also obtain an appropriately licensed copy (either the commercial version from The Qt Company or the LGPL version from the Qt Project).

即还需要获得Qt license(Qt公司的商用版本或者LGPL版本) 

A PyQt license covers all of Riverbank's commercial products. We do not sell these products individually.

(--以上引用riverbankcomputing.com/

PySide的推出比pyQt晚很多,但也有些年头了。由于先前PySide项目不是很完善,又缺乏文档,所以其存在感不高。

Pyside的诞生主要是Nokia(收购了Trolltech的Nokia当时是Qt的爸爸)与Riverbank Computing谈崩了的结果。

Riverbank Computing是pyQt的开发商,对pyQt采用GPLv3协议。Nokia主动与Riverbank Computing展开了多轮协商,表示希望pyQt能添加对LGPL协议的支持,这样对于很多商业用户会更友好,何况你在pyQt里使用的也是我们LGPL协议版本的Qt,这个要求不过分吧。

Riverbank Computing说我觉得不行。

大概是觉得Riverbank Computing吃相难看,Nokia一气之下决定单干,于2009年8月发布了支持了LGPL协议的PySide,pyQt的对标产品。

然鹅,就算你是亲生的,刚生下来也打不过一个壮小伙子,何况你马上就要被过继出去了。。(滑稽)

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

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

遭遇人生的重大变故,PySide项目未来如何发展还是个未知数,更不要说支持Qt5了。反观pyQt,在Qt5推出的半年内(2013年6月)就发布了支持Qt5的pyQt5。

一边是生死未卜的只支持Qt4还不完善的主要依靠社区维护的PySide,一边是全面支持Qt4/Qt5的文档健全的pyQt,强弱悬殊,高下立判。

好在Digia收购了Qt后,决定大力度支持Qt全方位发展,并于2014年9月将Qt分拆成一家独立全资子公司The Qt Company,后者于2016年在纳兹达克赫尔辛基上市。

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

虽说加大了投入,该补的课也绕不开,PySide2在Qt公司和Qt社区开发者的共同努力下,也只在2018年6月才正式发布了第一个版本,稳定性还是个问题。不过从0到1是最难的,后面就容易了,尤其最近发布的Qt 5.12 LTS释放了非常积极的信号,PySide2已经日趋完善,又是亲生的,还有LGPL开源协议的加持,今后PySide2有足够的理由成为Python开发者使用Qt的第一选择。

谈谈使用体验。

今年一个项目需要在Python中使用Qt,由于协议的限制,选择了PySide,后续PySide2发布后又换成了PySide2。整个过程无缝无痛,代码兼容性很好,基本只是Qt4到Qt5风格不同的地方需要改一下。

当时比较早,用的还是conda上的PySide2预发布版本,充当了小白鼠。代码中检验了qtDesigner绘制的ui转py,各类widgets,信号槽,继承线程类,与Python原生的线程、进程类配合,Pyinstaller打包等操作,没有遇到任何问题,应该说还是很稳定的。

界面设计中用到了一些pyQt载入stylesheet的代码,基本上把import里的pyQt5改成PySide2就行,说明两者的兼容性也很好,部分不同的地方Qt for Python项目官网也列出来了,对照着改一下即可。

先前回答中由于开源协议的问题,曾推荐非商用使用pyQt,商用使用PySide/PySide2。现在得改一下了,能用PySide/PySide2为何不用呢。

(--以上引用zhihu.com/question/3067

2.使用QT Designer 设计GUI

你需要安装PySide2,可以通过pip在线安装,笔者使用了下载whl文件进行安装,如下图:

笔者,win10下使用Anaconda3创建了虚拟环境pyside2,并 pip install PySide2-5.13.0-5.13.0-cp35.cp36.cp37-none-win_amd64.whl

笔者,虚拟环境的路径如下:D:\class1_application\Anaconda3\installer\envs\pyside2

安装完毕,在D:\class1_application\Anaconda3\installer\envs\pyside2\Lib\site-packages\PySide2文件下能找到designer.exe可执行文件。将其创建桌面快捷方式,以后可以在桌面通过双击启动QT Designer;

打开QT Designer启动界面如下:

相关的使用教程,略。

3.使用pyside-uic 把 .ui 文件转为 .py 文件

使用QT Designer设计完的文件将保存为后缀为ui的文件,你可以通过在安装了Pyside2虚拟环境“pyside2”中通过命令pyside2-uic -o 1.py package.ui将ui文件转成py文件,如下图在终端通过命令行将D:\class7_currently\test_exe\package.ui转成1.py文件:

转完py文件,如下图,新增一个1.py文件:

注意,pyside2-uic.exe存在虚拟环境“pyside2”文件夹的Scripts,即 D:\class1_application\Anaconda3\installer\envs\pyside2\Scripts下,可以看到有pyside2-uic.exe。

您可以通过终端,输入:

D:\class1_application\Anaconda3\installer\envs\pyside2\Scripts\pyside2-uic.exe -o D:\class7_currently\test_exe\1.py D:\class7_currently\test_exe\package.ui

如下图:

4.使用运行py文件

打开py文件,在文件的末尾增加以下代码,即可:

if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_Form()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())

如下图:


相关文章

上拉电阻和下拉电阻

上拉电阻和下拉电阻

在折腾Arduino或者树莓派信号输入的时候,时常听到的就是上拉电阻和下拉电阻,

查看全文

牛逼的树莓派dashboard

树莓派安装 Nginx + PHP7.3 + Pi Dashboard

查看全文

Linux 下使用 system

下面的教程将介绍如何将命令或程序配置为开机启动时自动运行的服务。完成配置之后,就

查看全文