值得学习的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 的方式.使用拖拽的方式,让开发更加高效,设计更加简单


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

目录
相关文章
|
1天前
|
Python
python pandas学习(一)
该代码段展示了四个主要操作:1) 删除指定列名,如商品id;2) 使用正则表达式模糊匹配并删除列,例如匹配订单商品名称1的列;3) 将毫秒级时间戳转换为带有时区调整的日期时间格式,并增加8小时以适应本地时区;4) 将列表转换为DataFrame后保存为Excel文件,文件路径和名称根据变量拼接而成。
12 3
|
4天前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
29 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
28天前
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
106 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
1月前
|
机器学习/深度学习 存储 数据挖掘
Python图像处理实用指南:PIL库的多样化应用
本文介绍Python中PIL库在图像处理中的多样化应用,涵盖裁剪、调整大小、旋转、模糊、锐化、亮度和对比度调整、翻转、压缩及添加滤镜等操作。通过具体代码示例,展示如何轻松实现这些功能,帮助读者掌握高效图像处理技术,适用于图片美化、数据分析及机器学习等领域。
73 20
|
1月前
|
数据可视化 数据挖掘 大数据
1.1 学习Python操作Excel的必要性
学习Python操作Excel在当今数据驱动的商业环境中至关重要。Python能处理大规模数据集,突破Excel行数限制;提供丰富的库实现复杂数据分析和自动化任务,显著提高效率。掌握这项技能不仅能提升个人能力,还能为企业带来价值,减少人为错误,提高决策效率。推荐从基础语法、Excel操作库开始学习,逐步进阶到数据可视化和自动化报表系统。通过实际项目巩固知识,关注新技术,为职业发展奠定坚实基础。
|
2月前
|
Python
Python学习的自我理解和想法(10)
这是我在千锋教育B站课程学习Python的第10天笔记,主要学习了函数的相关知识。内容包括函数的定义、组成、命名、参数分类(必须参数、关键字参数、默认参数、不定长参数)及调用注意事项。由于开学时间有限,记录较为简略,望谅解。通过学习,我理解了函数可以封装常用功能,简化代码并便于维护。若有不当之处,欢迎指正。
|
2月前
|
Python 容器
Python学习的自我理解和想法(9)
这是我在B站跟随千锋教育学习Python的第9天,主要学习了赋值、浅拷贝和深拷贝的概念及其底层逻辑。由于开学时间紧张,内容较为简略,但希望能帮助理解这些重要概念。赋值是创建引用,浅拷贝创建新容器但元素仍引用原对象,深拷贝则创建完全独立的新对象。希望对大家有所帮助,欢迎讨论。
|
23天前
|
存储 缓存 Java
Python高性能编程:五种核心优化技术的原理与Python代码
Python在高性能应用场景中常因执行速度不及C、C++等编译型语言而受质疑,但通过合理利用标准库的优化特性,如`__slots__`机制、列表推导式、`@lru_cache`装饰器和生成器等,可以显著提升代码效率。本文详细介绍了这些实用的性能优化技术,帮助开发者在不牺牲代码质量的前提下提高程序性能。实验数据表明,这些优化方法能在内存使用和计算效率方面带来显著改进,适用于大规模数据处理、递归计算等场景。
58 5
Python高性能编程:五种核心优化技术的原理与Python代码
|
2月前
|
Python
[oeasy]python055_python编程_容易出现的问题_函数名的重新赋值_print_int
本文介绍了Python编程中容易出现的问题,特别是函数名、类名和模块名的重新赋值。通过具体示例展示了将内建函数(如`print`、`int`、`max`)或模块名(如`os`)重新赋值为其他类型后,会导致原有功能失效。例如,将`print`赋值为整数后,无法再用其输出内容;将`int`赋值为整数后,无法再进行类型转换。重新赋值后,这些名称失去了原有的功能,可能导致程序错误。总结指出,已有的函数名、类名和模块名不适合覆盖赋新值,否则会失去原有功能。如果需要使用类似的变量名,建议采用其他命名方式以避免冲突。
52 14
|
2月前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
116 2

热门文章

最新文章

推荐镜像

更多