值得学习的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天前
|
调度 开发者 Python
Python中的异步编程:理解asyncio库
在Python的世界里,异步编程是一种高效处理I/O密集型任务的方法。本文将深入探讨Python的asyncio库,它是实现异步编程的核心。我们将从asyncio的基本概念出发,逐步解析事件循环、协程、任务和期货的概念,并通过实例展示如何使用asyncio来编写异步代码。不同于传统的同步编程,异步编程能够让程序在等待I/O操作完成时释放资源去处理其他任务,从而提高程序的整体效率和响应速度。
|
10天前
|
数据库 Python
异步编程不再难!Python asyncio库实战,让你的代码流畅如丝!
在编程中,随着应用复杂度的提升,对并发和异步处理的需求日益增长。Python的asyncio库通过async和await关键字,简化了异步编程,使其变得流畅高效。本文将通过实战示例,介绍异步编程的基本概念、如何使用asyncio编写异步代码以及处理多个异步任务的方法,帮助你掌握异步编程技巧,提高代码性能。
29 4
|
10天前
|
API 数据处理 Python
探秘Python并发新世界:asyncio库,让你的代码并发更优雅!
在Python编程中,随着网络应用和数据处理需求的增长,并发编程变得愈发重要。asyncio库作为Python 3.4及以上版本的标准库,以其简洁的API和强大的异步编程能力,成为提升性能和优化资源利用的关键工具。本文介绍了asyncio的基本概念、异步函数的定义与使用、并发控制和资源管理等核心功能,通过具体示例展示了如何高效地编写并发代码。
22 2
|
15天前
|
数据采集 JSON 测试技术
Python爬虫神器requests库的使用
在现代编程中,网络请求是必不可少的部分。本文详细介绍 Python 的 requests 库,一个功能强大且易用的 HTTP 请求库。内容涵盖安装、基本功能(如发送 GET 和 POST 请求、设置请求头、处理响应)、高级功能(如会话管理和文件上传)以及实际应用场景。通过本文,你将全面掌握 requests 库的使用方法。🚀🌟
36 7
|
16天前
|
机器学习/深度学习 数据采集 算法
Python机器学习:Scikit-learn库的高效使用技巧
【10月更文挑战第28天】Scikit-learn 是 Python 中最受欢迎的机器学习库之一,以其简洁的 API、丰富的算法和良好的文档支持而受到开发者喜爱。本文介绍了 Scikit-learn 的高效使用技巧,包括数据预处理(如使用 Pipeline 和 ColumnTransformer)、模型选择与评估(如交叉验证和 GridSearchCV)以及模型持久化(如使用 joblib)。通过这些技巧,你可以在机器学习项目中事半功倍。
21 3
|
9天前
|
数据采集 数据可视化 数据挖掘
利用Python进行数据分析:Pandas库实战指南
利用Python进行数据分析:Pandas库实战指南
|
15天前
|
文字识别 自然语言处理 API
Python中的文字识别利器:pytesseract库
`pytesseract` 是一个基于 Google Tesseract-OCR 引擎的 Python 库,能够从图像中提取文字,支持多种语言,易于使用且兼容性强。本文介绍了 `pytesseract` 的安装、基本功能、高级特性和实际应用场景,帮助读者快速掌握 OCR 技术。
32 0
|
5天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
5天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
5天前
|
存储 Python
Python编程入门:打造你的第一个程序
【10月更文挑战第39天】在数字时代的浪潮中,掌握编程技能如同掌握了一门新时代的语言。本文将引导你步入Python编程的奇妙世界,从零基础出发,一步步构建你的第一个程序。我们将探索编程的基本概念,通过简单示例理解变量、数据类型和控制结构,最终实现一个简单的猜数字游戏。这不仅是一段代码的旅程,更是逻辑思维和问题解决能力的锻炼之旅。准备好了吗?让我们开始吧!