PySide6精简教程(附图文!)

 更新时间:2023年02月03日 11:46:44   作者:钱彬 (Qian Bin)  
PySide6是Qt的Python封装,是Qt for Python的组成之一,另一部分是Shiboken,下面这篇文章主要给大家介绍了关于PySide6精简教程的相关资料,需要的朋友可以参考下

一、PySide6概述

近几年,受益于人工智能的崛起,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。这里首先介绍下两者的区别。

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)。

二、安装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程序包含下面三个基本步骤:

  • 设计GUI,图形化拖拽或手撸;
  • 响应UI的操作(如点击按钮、输入数据、服务器更新),使用信号与Slot连接界面和业务;
  • 打包发布;

下面我们按照这个步骤来快速实现一遍。

三、设计界面

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

使用QtWidget开发程序时,也有两种基本的使用方法,一种是通过designer开发界面,另一种是用代码手动开发界面。本文的目的是极简快速入门,所以使用designer这种方便的方式进行开发。

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

pyside6-designer

启动后designer界面如下所示:

这里我们选择Widget,并点击创建,之后打开的界面如下:

让我们来看一下界面里都有什么:

  • 组件选择区:用来选择组件,鼠标选择组件后就可以拖拽到窗口界面上,在本教程中会使用到一部分这里的组件;
  • 工作区:用来布置界面,调整窗口,我们可以把工作区中的窗口随意拖拽、调整大小;
  • 对象查看区:查看界面上共有多少组件,以及它们的布局关系;
  • 属性设置区:设置组件的属性,如文本、大小、名称等;

这里我们先把工作区中的窗口拖放到中间,再从组件选择区里拖拽一个Label组件到窗口上,如下图所示:

之后我们双击窗口里面的Label,输入“你好啊!世界”,我们会发现默认的Label大小并不能完全展示文本,所以我们把Label的宽度拉长(单击Label后,拖住周围的深蓝色方块即可调整大小),如下图所示:

接下来我们保存这个界面(Ctrl+S),或者在菜单栏选择“文件”->“保存”,我们将其保存到桌面一个名为hello的文件夹中,保存命名为hello.ui。

注意,PySide6是不能直接使用ui文件的,我们还需要将其转为py文件。首先cd到hello文件夹中,然后使用命令:

pyside6-uic hello.ui > ui.py

这样我们就会得到一个ui.py文件,我们可以打开看一下,里面都是一些界面代码,如下所示:

# -*- coding: utf-8 -*-
from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
    QMetaObject, QObject, QPoint, QRect,
    QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
    QFont, QFontDatabase, QGradient, QIcon,
    QImage, QKeySequence, QLinearGradient, QPainter,
    QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QLabel, QSizePolicy, QWidget)

class Ui_Form(object):
    def setupUi(self, Form):
        if not Form.objectName():
            Form.setObjectName(u"Form")
        Form.resize(400, 300)
        self.label = QLabel(Form)
        self.label.setObjectName(u"label")
        self.label.setGeometry(QRect(180, 110, 101, 16))

        self.retranslateUi(Form)

        QMetaObject.connectSlotsByName(Form)
    # setupUi

    def retranslateUi(self, Form):
        Form.setWindowTitle(QCoreApplication.translate("Form", u"Form", None))
        self.label.setText(QCoreApplication.translate("Form", u"\u4f60\u597d\u554a\uff01\u4e16\u754c\uff01", None))
    # retranslateUi

如果不使用designer,那么这个ui.py就需要我们手动来写,所以,使用designer可以加快开发速度,减少工作量,提升开发效率。

这里还要个问题要解决,我们使用命令pyside6-uic转换出来的ui.py文件其保存格式不是utf-8,因此我们要用编辑器将其保存为utf-8才可以,否则后面加载该文件会报错:

四、响应UI操作

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

# 导入sys
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_())

注释中包含了详细的代码说明,接下来我们只要执行这个py文件,就可以看到我们的界面了:

五、打包部署

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

下面主要以windows为例。

首选安装打包工具:

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,会自动打开浏览器,然后进入打包部署配置页面,如下图所示:

  • Script Location:选择要打包的py主程序;
  • One File:选生成单一文件;
  • Console Window:选择不显示命令行窗口;
  • Icon:可设置图标;
  • Additional Files:除了主程序以外其它的需要打包的文件;
  • Advanced:可设置UPX(从这里下载 https://upx.github.io/)然后点击“Convert .PY to .EXE”就会自动生成.exe文件了,在当前目录output子目录下。该特性用于进一步压缩exe体积。

最终配置如下所示:

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

到这里本文就完成了一个简单的基于PySide6的项目开发(虽然我们几乎没实现什么功能)。

总结

到此这篇关于PySide6精简教程的文章就介绍到这了,更多相关PySide6精简教程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python操作Mysql实例代码教程在线版(查询手册)

    Python操作Mysql实例代码教程在线版(查询手册)

    本文介绍了Python操作MYSQL、执行SQL语句、获取结果集、遍历结果集、取得某个字段、获取表字段名、将图片插入数据库、执行事务等各种代码实例和详细介绍,代码居多,是一桌丰盛唯美的代码大餐
    2013-02-02
  • python中cv2模块安装详细图文教程

    python中cv2模块安装详细图文教程

    在Python中cv2是OpenCV库的一个模块,这是一个开源的计算机视觉和机器学习软件库,下面这篇文章主要给大家介绍了关于python中cv2模块安装的相关资料,需要的朋友可以参考下
    2024-05-05
  • Mac下使用HomeBrew安装python3

    Mac下使用HomeBrew安装python3

    这篇文章介绍了Mac下使用HomeBrew安装python3的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • pandas DataFrame where的实现示例

    pandas DataFrame where的实现示例

    pandas.DataFrame.where方法提供了一种灵活的方式来根据条件筛选和替换DataFrame中的元素,本文主要介绍了pandas DataFrame where的实现示例,感兴趣的可以了解一下
    2025-04-04
  • python网络爬虫学习笔记(1)

    python网络爬虫学习笔记(1)

    这篇文章主要为大家详细介绍了python网络爬虫学习笔记的第一篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)

    matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)

    这篇文章主要介绍了matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • 使用Pandas的Series方法绘制图像教程

    使用Pandas的Series方法绘制图像教程

    今天小编就为大家分享一篇使用Pandas的Series方法绘制图像教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python中赋值语句的特点和形式

    python中赋值语句的特点和形式

    这篇文章主要介绍了python中赋值语句的特点和形式,文中介绍了多目标赋值的共享引用问题,多目标赋值其实是多个目标对同一个内存空间的引用,这里要分两种情况,当被引用对象是不可变对象时则不存在问题,感兴趣的朋友跟随小编一起看看吧
    2023-12-12
  • Python实战之自动发送邮件的实现

    Python实战之自动发送邮件的实现

    自动发送邮件能应用于许多场景,下面本文就来和大家讲讲怎么用Python构建一个自动发送邮件的脚本。感兴趣的小伙伴可以动手尝试一下
    2022-05-05
  • Python大批量搜索引擎图像爬虫工具详解

    Python大批量搜索引擎图像爬虫工具详解

    这篇文章主要介绍了Python大批量搜索引擎图像爬虫工具,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11

最新评论