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


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

目录
相关文章
|
10月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
506 2
|
10月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
730 1
|
10月前
|
算法 Java Docker
(Python基础)新时代语言!一起学习Python吧!(三):IF条件判断和match匹配;Python中的循环:for...in、while循环;循环操作关键字;Python函数使用方法
IF 条件判断 使用if语句,对条件进行判断 true则执行代码块缩进语句 false则不执行代码块缩进语句,如果有else 或 elif 则进入相应的规则中执行
1641 1
|
10月前
|
数据可视化 关系型数据库 MySQL
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
本文详解基于Python的电影TOP250数据可视化大屏开发全流程,涵盖爬虫、数据存储、分析及可视化。使用requests+BeautifulSoup爬取数据,pandas存入MySQL,pyecharts实现柱状图、饼图、词云图、散点图等多种图表,并通过Page组件拖拽布局组合成大屏,支持多种主题切换,附完整源码与视频讲解。
904 4
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
|
10月前
|
传感器 运维 前端开发
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
本文解析异常(anomaly)与新颖性(novelty)检测的本质差异,结合distfit库演示基于概率密度拟合的单变量无监督异常检测方法,涵盖全局、上下文与集体离群值识别,助力构建高可解释性模型。
667 10
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
|
10月前
|
存储 Java 索引
(Python基础)新时代语言!一起学习Python吧!(二):字符编码由来;Python字符串、字符串格式化;list集合和tuple元组区别
字符编码 我们要清楚,计算机最开始的表达都是由二进制而来 我们要想通过二进制来表示我们熟知的字符看看以下的变化 例如: 1 的二进制编码为 0000 0001 我们通过A这个字符,让其在计算机内部存储(现如今,A 字符在地址通常表示为65) 现在拿A举例: 在计算机内部 A字符,它本身表示为 65这个数,在计算机底层会转为二进制码 也意味着A字符在底层表示为 1000001 通过这样的字符表示进行转换,逐步发展为拥有127个字符的编码存储到计算机中,这个编码表也被称为ASCII编码。 但随时代变迁,ASCII编码逐渐暴露短板,全球有上百种语言,光是ASCII编码并不能够满足需求
385 4
|
C语言 Python
Python学习:内建属性、内建函数的教程
本文介绍了Python中的内建属性和内建函数。内建属性包括`__init__`、`__new__`、`__class__`等,通过`dir()`函数可以查看类的所有内建属性。内建函数如`range`、`map`、`filter`、`reduce`和`sorted`等,分别用于生成序列、映射操作、过滤操作、累积计算和排序。其中,`reduce`在Python 3中需从`functools`模块导入。示例代码展示了这些特性和函数的具体用法及注意事项。
472 2
|
存储 算法 API
Python学习五:函数、参数(必选、可选、可变)、变量、lambda表达式、内置函数总结、案例
这篇文章是关于Python函数、参数、变量、lambda表达式、内置函数的详细总结,包含了基础知识点和相关作业练习。
357 0
|
API Python
Python学习日记(二:函数和逻辑操作)
Python中的函数和逻辑操作至关重要。函数包括可变和不可变参数。
275 2

推荐镜像

更多