python-15-python开发Qt的GUI框架

PySide6精简教程
使用PyQt6创建第一个应用程序

1 GUI框架QT

近几年,受益于人工智能的崛起,Python语言几乎以压倒性优势在众多编程语言中异军突起,成为AI时代的首选语言。在很多情况下,我们想要以图形化方式将我们的人工智能算法打包提供给用户使用,这时候选择以python为主的GUI框架就非常合适了。

QT是众多GUI框架里面非常著名的一款,它本身由C++开发,天然支持基于C++的GUI编程,编出来的图形化软件在当今众多GUI框架中运行效率几乎是天花板级别的,拥有完善的第三方库,极其适合数字图像处理、文档排版、多媒体、3D建模等专业软件开发。与此同时,QT还有一个强大的功能:支持跨平台,简单来理解,就是我们只需要编写一套代码就可以同时在windows、mac、linux上运行。

值得一提的是,QT对Python也有完善API支持,意味着我们可以规避C++编程的苦恼,使用更简洁的Python来代替C++开发QT应用,同样具备跨平台等优势。需要说明的是,目前有两种QT对应的Python工具:PySide和PyQt。这里首先介绍下两者的区别。

1.1 PySide

PySide是Qt公司的产品,PyQt是第三方公司的产品,二者用法基本相同,不过在使用协议上却有很大差别。PySide可以在LGPL协议下使用,PyQt则在GPL协议下使用。这两个协议的区别就是如果使用PyQt,那么你开发的软件必须开源,否则就存在被告的风险。而PySide就没有这种约束,不管是开发商业闭源软件还是开源软件,你都可以不开源代码,开不开源是你的自由。从这一点上来看,对于商业公司或者说有商业考虑的软件来说,我更倾向于推荐PySide,更何况PySide还是QT的亲儿子。虽然PySide和PyQt在协议上有不同,但是两者提供的接口几乎是完全一致的。目前市面上PyQt的教程完全适合PySide,因此,对于学习者来说学习任何一个都是可以的。

PySide目前常见的有两个版本:PySide2和PySide6。PySide2由C++版的Qt5开发而来.,而PySide6对应的则是C++版的Qt6。从PySide6开始,PySide的命名也会与Qt的大版本号保持一致,不会再出现类似PySide2对应Qt5这种容易混淆的情况。

在使用层面上,PySide2和PySide6无过多的差异,只有一点需要注意,使用PySide6开发的程序在默认情况下不兼容Windows7系统,这也是Qt6所决定的(即使是C++的QT6也不支持windows7)。

1.2 PyQt

PyQt要比PySide推出时间早得多,它的开发商是Riverbank Computing,由于推出时间早,PyQt就比较成熟了,并且资料也很完善,最开始是有PyQt4对应的是Qt4版本,后来推出了PyQt5,对应Qt5版本,目前最新发布的版本是PyQt6。

值得注意的是PyQt的采用的是GPLv3许可证和需要购买版权的商业许可证发布的,该许可证允许开发专有应用程序,可以由开发者选择。GPLv3许可证大概意思就是说,使用PyQt后你的程序就必须要开源,如果闭源商用就会违反协议,后果自负,在国内可能很多公司部注重这个,随便在用,但是如果公司比较有影响力的话,违反协议说不定哪天收到律师函。

2 安装PySide6

对于PySide开发来说,我们不需要完整的安装几个G的Qt,可以像普通Python库一样直接通过pip安装就行,大概占用300MB空间(需要提前安装好python3以及pip)。

pip install --upgrade pip
pip install pyside6 -i https://mirror.baidu.com/pypi/simple

基于PySide6开发GUI程序包含下面三个基本步骤:
(1)设计GUI,图形化拖拽或手撸;
(2)响应UI的操作(如点击按钮),使用信号与Slot连接界面和业务;
(3)打包发布;

2.1 设计界面

PySide为我们提供了两种开发界面的方式,一种叫QtWidget,是在网上教程中最常见的方式;另一种叫QML,是一种新型的开发方式,也是Qt正在努力推广的开发方式。我们主要使用QtWidget这种方式。

使用QtWidget开发程序时,也有两种基本的使用方法,一种是通过designer开发界面,另一种是用代码手动开发界面。我们使用designer这种方便的方式进行开发。

在cmd终端中使用下面的命令启动designer:

pyside6-designer
启动后designer界面
这里我们选择Widget,并点击创建,之后打开的界面如下:
(1)组件选择区:
用来选择组件,鼠标选择组件后就可以拖拽到窗口界面上;
(2)工作区:
用来布置界面调整窗口,可以把工作区中的窗口随意拖拽、调整大小;
(3)对象查看区:
查看界面上共有多少组件,以及它们的布局关系;
(4)属性设置区:
设置组件的属性,如文本、大小、名称等;

这里我们先把工作区中的窗口拖放到中间,再从组件选择区里拖拽一个Label组件到窗口上。
在这里插入图片描述
保存这个界面(Ctrl+S),或者在菜单栏选择“文件”->“保存”,将其保存到桌面一个名为hello的文件夹中,保存命名为hello.ui。注意,PySide6是不能直接使用ui文件的,我们还需要将其转为py文件。首先cd到hello文件夹中,然后使用命令:

pyside6-uic hello.ui > ui.py

这样我们就会得到一个ui.py文件,可以打开看一下,里面都是一些界面代码。如果不使用designer,那么这个ui.py就需要我们手动来写,所以,使用designer可以加快开发速度,减少工作量,提升开发效率。
这里还要个问题要解决,我们使用命令pyside6-uic转换出来的ui.py文件其保存格式不是utf-8,因此我们要用编辑器将其保存为utf-8才可以,否则后面加载该文件会报错。

2.2 响应UI操作

接下来我们就要写代码来把界面展示出来,新建一个名为hello.py文件:

import sys

# 任何一个PySide界面程序都需要使用QApplication
# 我们要展示一个普通的窗口,所以需要导入QWidget,用来让我们自己的类继承
from PySide6.QtWidgets import QApplication, QWidget
# 导入我们生成的界面
from ui import Ui_Form


# 继承QWidget类,以获取其属性和方法
class MyWidget(QWidget):
    def __init__(self):
        super().__init__()
        # 设置界面为我们生成的界面
        self.ui = Ui_Form()
        self.ui.setupUi(self)


# 程序入口
if __name__ == "__main__":
    # 初始化QApplication,界面展示要包含在QApplication初始化之后,结束之前
    app = QApplication(sys.argv)

    # 初始化并展示我们的界面组件
    window = MyWidget()
    window.show()

    # 结束QApplication
    sys.exit(app.exec())

运行后可以看到页面。
在这里插入图片描述

2.3 打包部署

我们最终希望交给用户是一个纯粹的exe可执行文件(可以包含一些dll之类的动态库或配置文件),用户不需要安装Python依赖,直接双击就可以运行展示。

一、安装打包工具
pip install pyinstaller -i https://mirror.baidu.com/pypi/simple
pip install auto-py-to-exe -i https://mirror.baidu.com/pypi/simple
二、运行:auto-py-to-exe
(1)Script Location:选择要打包的py主程序;
(2)One File:选生成单一文件;
(3)Console Window:选择不显示命令行窗口;
(4)Icon:可设置图标;
(5)Additional Files:除了主程序以外其它的需要打包的文件;

会自动打开浏览器,然后进入打包部署配置页面,如下图所示:
在这里插入图片描述

最终在hello文件下会生成output文件夹,其中就生成了打包部署好的exe文件。

3 安装PyQt6

在PyQt中编写UI界面可以直接通过代码来实现,也可以通过Qt Designer来完成。Qt Designer中的操作方式十分灵活,其通过拖拽的方式放置控件可以随时查看控件效果。Qt Designer生成的.ui文件(实质上是XML格式的文件)也可以通过pyuic6工具转换成.py文件。

3.1 配置PyCharm

指定的一些版本里才有Qt Designer工具。

CMD>conda activate python38
CMD>pip install  PyQt6 -i https://pypi.douban.com/simple
CMD>pip install  PyQt6-tools -i https://pypi.douban.com/simple
CMD>pip list

添加两个external tool,“Qt Designer”和“pyuic”,前者作为打开Qt图形化界面进行UI的编辑,后者是将生成的.ui文件转换为.py文件,从而能够运行它。
一、创建Qt Designer
在新建的工程下,File->Settings->Tools->External Tools,点击加号。

(1)名称:可以自定义,我填的Qt Designer
(2)组:可以自定义,也可以默认
(3)描述:可填可不填
(4)工具设置:
程序:填Python目录下的\Scripts\pyqt6-tools.exe
实参:这个要注意,必须填designer
工作目录:$FileDir$这个表示你在哪个文件夹打开的designer,
生成的ui文件就在哪个文件夹。

在这里插入图片描述
二、创建pyuic
在新建的工程下,File->Settings->Tools->External Tools,点击加号。

(1)名称:可以自定义,我填的pyuic
(2)组:可以自定义,也可以默认,我填的PYQT6
(3)描述:可填可不填
(4)工具设置:
程序:填Python目录下的\Scripts\pyuic6.exe
实参:注意,这里要填$FileName$ -o $FileNameWithoutExtension$.py
工作目录:$FileDir$ # 生成的py文件和ui文件在同一目录。

在这里插入图片描述
配置成功以后
在这里插入图片描述

3.2 应用

(1)选择Main Window,Create
在这里插入图片描述
(2)选中 label 拖拽到window中,Save,建议保存在当前工程目录下

在这里插入图片描述
(3)选中该文件,右击,External Tools,PyUIC,这个时候会生成一个.py文件
在这里插入图片描述
(4)写一个主类来测试一下
main.py

import sys
import hello
from PyQt6.QtWidgets import QApplication, QMainWindow
if __name__ =='__main__':
    app = QApplication(sys.argv)
    MainWindow = QMainWindow()
    ui = hello.Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮皮冰燃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值