值得学习的Python GUI 库 - pyQt5快速入门及精美界面设计体验

简介: 在很多追求极致的开发者中,大多都会拿 Python 跟其他编程语言比较,比如和java或者 C/C++比较一番,大家通常都会不约而同地从执行的角度对一门语言进行比较.而且这也是最直观的感受,所以 Python 会被普遍认为执行速度不够快.但是我一直觉得,存在即合理,每门编程语言都有它存在的意义,每门语言都有自己擅长的地方,一门编程语言的诞生大多都是作者当时为了解决自己遇到的某一领域难题而创造的,所以每一门语言在某一领域都有自己的优势,而且如今 CPU 的处理速度足够快,基本可以缩小很多领域之间不同语言的执行效率差距.各司其职,合适的语言运用在合适的领域或许能得到意想不到的效果.语言没有好坏之分

前言


在很多追求极致的开发者中,大多都会拿 Python 跟其他编程语言比较,比如和java或者 C/C++比较一番,大家通常都会不约而同地从执行的角度对一门语言进行比较.而且这也是最直观的感受,所以 Python 会被普遍认为执行速度不够快.但是我一直觉得,存在即合理,每门编程语言都有它存在的意义,每门语言都有自己擅长的地方,一门编程语言的诞生大多都是作者当时为了解决自己遇到的某一领域难题而创造的,所以每一门语言在某一领域都有自己的优势,而且如今 CPU 的处理速度足够快,基本可以缩小很多领域之间不同语言的执行效率差距.各司其职,合适的语言运用在合适的领域或许能得到意想不到的效果.语言没有好坏之分,也没有评判的意义,而且都是大家根据自己喜好,需求和使用感受选择的结果.当然这不是我们今天讨论的重点,我也没有讨论这些的能力,作为上层的使用者,最重要的是怎么使用好他.那说到使用也是看到语言的优点,那 Python 有哪些优点呢?


  1. Python 注重可读性,一致性和软件质量,这使得它易于理解,而且 Python 支持高级重用机制
  2. 开发效率高,得益于 Python 活跃的社区和丰富的类库资源的支持,让功能实现更简单快速
  3. Python 有灵活的继承机制,这使得他可以和其他语言相互调用,大家也称 Python 为"胶水语言"
  4. 易于学习


所以学习和使用 pyQt5 也是因为 Python 以上这些优点.也觉得他适合用来做这件事.圆规正传,进入今天的主角 PyQt5 的学习


PyQt5 是什么


上面我们说了为什么使用 PyQt5,接着我们了解它是什么?

Qt 库是世界上最强大的 GUI 库之一,跨平台,开发语言为 C++(https://www.qt.io). PyQt 是 QT 框架的 Python 语言实现,PyQt5 是用来创建 Python GUI 应用程序的工具包。作为一个跨平台的工具包,PyQt 可以在所有主流操作系统上运行(Unix,Windows,Mac)。有 PyQt3,PyQt4,PyQt5,PyQt6 几个版本。PyQt5 和之前的版本已经有较大的区别,而且也是目前大家比较常用的版本,如果你是学习肯定是以最新的为主,可以直接使用 pyQt6,其实 pyQt5 也是不错的选择,也是本文所使用的版本.


官方网站:https://www.riverbankcomputing.com/software/pyqt/download5

网络异常,图片无法展示
|

PyQt5 怎么用


安装


方式 1(推荐)


直接使用 pip 进行安装,这也是最常用的模式

pip install pyQt5

pip install pyQt5-tools

网络异常,图片无法展示
|
网络异常,图片无法展示
|


当你遇到上述错误时,是因为 pip 的依赖项解析器当前未考虑安装的所有包,单独安装相关的包即可:pyqtwebengine


网络异常,图片无法展示
|


方式 2


通过下载 exe 安装版进行安装

以上两种安装方式所安装的pyQt5都在 Lib\site-packages\PyQt5 目录下


网络异常,图片无法展示
|


如果安装 pyQt5 出现问题权限问题,拒绝访问.可使用下面的命令尝试安装:


pip install PyQt5-tools   --user


配置 qt Designer


网络异常,图片无法展示
|


程序/Program:Lib\site-packages\qt5_applications目录下的designer.exe文件(E:\Anaconda3\Lib\site-packages\qt5_applications\Qt\bindesigner.exe)
参数/Argument:-m PyQt5.uic.pyuic  $FileName$ -o $FileNameWithoutExtension$.py
工作目录/Working directory: $FileDir$

网络异常,图片无法展示
|

配置 PyUIC

网络异常,图片无法展示
|

程序/Program:python的安装目录下的python.exe文件(anaconda的安装路径下的python.exe)
参数/Argument:-m PyQt5.uic.pyuic  $FileName$ -o $FileNameWithoutExtension$.py
工作目录/Working directory: $FileDir$
配置 Pyrcc

网络异常,图片无法展示
|

程序/Program:python的安装目录下的Scripts文件夹的pyrcc5.exe文件
参数/Argument:$FileName$ -o $FileNameWithoutExtension$_rc.py
工作目录/Working directory: $FileDir$


$FileDir$是在当前目录下将.ui 文件生成.py 文件,而 $ProjectFileDir$是在总目录树下生成,这时就会产生空文件夹的报错问题。如果用后者的话就会遇到常见问题 Error: No such file or directory: "jianji.ui"


安装完成后在 file->External Tools 下面就可以看到刚才配置的扩展工具

网络异常,图片无法展示
|


使用步骤

用法:先使用 QTDesigner 设计好界面,然后保存到项目目录:


网络异常,图片无法展示
|
网络异常,图片无法展示
|


然后通过 PyUIC 把 QTDesigner 创建的 ui 转化为 Python 代码,大大简化了书写代码的繁琐操作

网络异常,图片无法展示
|

实际运行的代码是:

python.exe -m PyQt5.uic.pyuic jianji.ui -o jianji.py


PyQt5 能做什么


PyQt5 是什么的介绍中已经了解到 PyQt5 是一个和 TKinter 类似的 GUI 开发库,他比 TKinter 更强大,更专业.我们通过实例来了解他能做什么


第一个 pyqt5 程序

importsysfromPyQt5.QtWidgetsimportQApplication, QWidgetif__name__=='__main__':
# 创建QApplication实例app=QApplication(sys.argv)  # 获取命令行参数# 创建一个窗口w=QWidget()
# 设置窗口的尺寸w.resize(800, 300)  # 宽,高# 显示位置w.move(300, 300)
# 设置窗口标题w.setWindowTitle('我的界面')
# 显示窗口w.show()
sys.exit(app.exec_())


进入程序主循环,循环扫描响应在窗口上的事件,让整个程序不会退出

通过 exit 函数能够确保主循环安全结束


网络异常,图片无法展示
|


小试牛刀


效果图如下:


网络异常,图片无法展示
|


文章篇幅原因ui转化的代码就不粘贴了.


简单调用并展示页面:

importsysimportoffice.appguis.jianjiascutfromPyQt5.QtWidgetsimportQApplication, QMainWindowif__name__=='__main__':
# 实例化,传参app=QApplication(sys.argv)
# 创建对象mainWindow=QMainWindow()
# 创建ui,引用demo1文件中的Ui_MainWindow类ui=cut.Ui_MainWindow()
# 调用Ui_MainWindow类的setupUi,创建初始组件ui.setupUi(mainWindow)
# 创建窗口mainWindow.show()
# 进入程序主循环,循环扫描响应在窗口上的事件,让整个程序不会退出#通过exit函数确保主循环安全结束sys.exit(app.exec_())


在《体验 Python 剪辑视频以及相关问题解决, 一劳永逸!》这篇文章中我们使用了 TKinter 来制作 UI 界面,那今天我们用 pyqt5 来实现它,对比两者在开发上的区别


网络异常,图片无法展示
|
网络异常,图片无法展示
|

importsysimportoffice.appguis.jianjiascutfromPyQt5.QtWidgetsimportQApplication, QMainWindow, QWidget, QGroupBox, QPushButton, QLabel, QHBoxLayout,  QVBoxLayout, QGridLayout, QFormLayout, QLineEdit, QTextEditfrommoviepy.editorimport*# 按钮的单击事件的方法(自定义的槽)defonClick_Button(origin, t1, t2, savedir):
s1=origin.toPlainText()
s2=t1.toPlainText()
s3=t2.toPlainText()
s4=savedir.toPlainText()
print(s1)
print(s2)
print(s3)
print(s4)
print("开始剪辑")
clip=VideoFileClip(s1).subclip(s2, s3)
# 将剪出的视频进行存储clip.write_videofile(s4)
# 你的剪辑代码print("结束")
if__name__=='__main__':
# 只有直接运行这个脚本,才会往下执行# 别的脚本文件执行,不会调用这个条件句# 实例化,传参app=QApplication(sys.argv)
# 创建对象mainWindow=QMainWindow()
# 创建ui,引用demo1文件中的Ui_MainWindow类ui=cut.Ui_MainWindow()
# 调用Ui_MainWindow类的setupUi,创建初始组件ui.setupUi(mainWindow)
t1=ui.textEditt2=ui.textEdit_2t3=ui.textEdit_3t4=ui.textEdit_4ui.pushButton.clicked.connect(lambda: onClick_Button(t1, t3, t4, t2))
# 创建窗口mainWindow.show()
# 进入程序的主循环,并通过exit函数确保主循环安全结束(该释放资源的一定要释放)sys.exit(app.exec_())


总结


PyQt5 的页面设计中,PyQt5 拥有所见即所得的可视化设计工具 PyQt5 Qt Designer,可通过拖拽的方式进行设计.类似于VS 集成编辑器开发.Net 的方式.使用拖拽的方式,让开发更加高效,设计更加简单


网络异常,图片无法展示
|

目录
相关文章
|
14天前
|
XML JSON 数据库
Python的标准库
Python的标准库
131 77
|
9天前
|
Python 容器
Python学习的自我理解和想法(9)
这是我在B站跟随千锋教育学习Python的第9天,主要学习了赋值、浅拷贝和深拷贝的概念及其底层逻辑。由于开学时间紧张,内容较为简略,但希望能帮助理解这些重要概念。赋值是创建引用,浅拷贝创建新容器但元素仍引用原对象,深拷贝则创建完全独立的新对象。希望对大家有所帮助,欢迎讨论。
|
11天前
|
存储 索引 Python
Python学习的自我理解和想法(6)
这是我在B站千锋教育学习Python的第6天笔记,主要学习了字典的使用方法,包括字典的基本概念、访问、修改、添加、删除元素,以及获取字典信息、遍历字典和合并字典等内容。开学后时间有限,内容较为简略,敬请谅解。
|
11天前
|
Python
Python学习的自我理解和想法(7)
学的是b站的课程(千锋教育),跟老师写程序,不是自创的代码! 今天是学Python的第七天,学的内容是集合。开学了,时间不多,写得不多,见谅。
|
10天前
|
存储 安全 索引
Python学习的自我理解和想法(8)
这是我在B站千锋教育学习Python的第8天,主要内容是元组。元组是一种不可变的序列数据类型,用于存储一组有序的元素。本文介绍了元组的基本操作,包括创建、访问、合并、切片、遍历等,并总结了元组的主要特点,如不可变性、有序性和可作为字典的键。由于开学时间紧张,内容较为简略,望见谅。
|
11天前
|
存储 索引 Python
Python学习的自我理解和想法(4)
今天是学习Python的第四天,主要学习了列表。列表是一种可变序列类型,可以存储任意类型的元素,支持索引和切片操作,并且有丰富的内置方法。主要内容包括列表的入门、关键要点、遍历、合并、判断元素是否存在、切片、添加和删除元素等。通过这些知识点,可以更好地理解和应用列表这一强大的数据结构。
|
11天前
|
索引 Python
Python学习的自我理解和想法(5)
这是我在B站千锋教育学习Python的第五天笔记,主要内容包括列表的操作,如排序(`sort()`、``sorted()``)、翻转(`reverse()`)、获取长度(`len()`)、最大最小值(`max()`、``min()``)、索引(`index()`)、嵌套列表和列表生成(`range`、列表生成式)。通过这些操作,可以更高效地处理数据。希望对大家有所帮助!
|
21天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
20天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
8天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
101 80