一、基础知识
(一)简介
1. 什么是PyQt5
PyQt是基于Digia公司强大的图形程序框架Qt的Python接口,由一组Python模块构成,它是一个创建GUI应用程序的工具包,由Phil Thompson开发。
自从1998年首次将Qt移植到Python上形成PyQt以来,已经发布了PyQt3、PyQt4和PyQt5等3个主要版本,最新版本是PyQt 5。
2. PyQt5的主要特点
- 对Qt库进行完全封装。
- 使用信号/槽机制进行通信。
- 提供了一整套进行GUI程序开发的窗口控件。
- 本身拥有超过620个类和近6000个函数及方法。
- 可以跨平台运行在所有主要操作系统上,包括UNIX、Windows、Mac OS。
- 支持使用Qt的可视化设计器进行图形界面设计,并能够自动生成Python代码。
3. PyQt5与Qt的关系
Qt(中国区官网:https://www.qt.io/cn)是1991年由挪威的Trolltech公司(奇趣科技)开发的一个基于C++的跨平台GUI库,它包括跨平台类库、集成开发工具和跨平台的IDE。
PyQt(官网:https://www.riverbankcomputing.com/)则是将Python与Qt融为一体,也就是说,PyQt允许使用Python语言调用Qt库中的API,这样做的最大好处就是在保留了Qt高运行效率的同时,大大提高了开发效率。因为,相对于C++语言来说,Python语言的代码量、开发效率都要更高,而且其语法简单、易学。PyQt对Qt做了完整的封装,几乎可以用PyQt做Qt能做的任何事情。
Qt的发展历程:

PyQt就是使用Python对Qt进行了封装,而PyQt5则是PyQt的一个版本。
PyQt5与Qt的关系:

4. PyQt5的主要的类和模块


QtSvg模块主要提供了可用于显示SVG矢量图形文件的类,那么什么是SVG文件呢?SVG是一种可缩放的矢量图形,它的英文全称为Scalable Vector Graphics,是一种用于描述二维图形和图形应用程序的XML语言。SVG图像非常适合于设计高分辨率的Web图形页面,用户可以直接用代码来描绘图像,也可以用任何文字处理工具打开SVG图像,而且可以通过改变部分代码来使图像具有交互功能,并能够随时插入HTML中通过浏览器来观看。
PyQt5的官方帮助地址:https://www.riverbankcomputing.com/static/Docs/PyQt5/
5. 除了PyQt5的其他常用GUI开发库
1. Tkinter
Tkinter又称“Tk接口”,是一个轻量级的跨平台图形用户界面(GUI)开发工具,是Tk图形用户界面工具包标准的Python接口,可以运行在大多数Unix、Windows和Ma cOS系统中,而且Tkinter是安装Python解释器时自动安装的组件,Python的默认IDLE就是使用Tkinter开发的。
2. Flexx
Flexx是用于创建图形用户界面(GUI)的纯Python工具箱,该工具箱使用Web技术进行渲染。作为跨平台的Python工具,用户可以使用Flexx创建桌面应用程序和Web应用程序,同时可以将程序导出到独立的HTML文档中。
作为GitHub推荐的纯Python图形界面开发工具,它的诞生基于网络,已经成为向用户提供应用程序及交互式科学内容越来越流行的方法。
3. wxPython
wxPython是Python语言的一套优秀的GUI图形库,可以帮助开发人员轻松创建功能强大的图形用户界面的程序。同时wxPython作为优秀的跨平台GUI库wxWidgets的Python封装,具有非常优秀的跨平台能力,可以在不修改程序的情况下在多种平台上运行,支持Windows、Mac OS及大多数的Unix系统。
4. Kivy
Kivy是一款用于跨平台快速应用开发的开源框架,只需编写一套代码便可轻松运行于各大移动平台和桌面上,如Android、iOS、Linux、Ma cOS和Windows等。Kivy采用Python和Cython编写。
5. PySide
PySide是跨平台的应用程序框架Qt的Python绑定版本,可以使用Python语言和Qt进行界面开发。2009年8月,PySide首次发布,提供和PyQt类似的功能,并兼容API。但与PyQt不同的是,它使用LGPL授权,允许进行免费的开源软件和私有的商业软件的开发;另外,相对于PyQt,它支持的Qt版本比较老,最高支持到Qt 4.8版本,而且官方已经停止维护该库。
6. PyGTK
PyGTK是Python对GTK+GUI库的一系列封装,最经常用于GNOME平台上,虽然也支持Windows系统,但表现不太好,所以,如果在Windows系统上开发Python的GUI程序,不建议使用该库。
6. VMware和Ubantu下载地址
VMware是常用的一种虚拟机软件,下载地址:https://www.vmware.com/cn/products/workstation-player/workstation-player-evaluation.html。
Ubuntu系统镜像文件的下载地址:https://ubuntu.com/download/desktop。
(二)前期准备
1. 创建Python项目
需要设置项目的存放位置和虚拟环境路径,设置的虚拟环境的“Base interpreter”解释器应该是python.exe文件的地址。

2. 安装PyQt5
pip install PyQt5
PyQt相关模块及依赖包所在文件夹位置:

1. 安装模块常用的国内镜像地址
# 阿里云:https://mirrors.aliyun.com/pypi/simple/
# 清华大学:https://pypi.tuna.tsinghua.edu.cn/simple
# 中国科技大学:https://pypi.mirrors.ustc.edu.cn/simple/
# 豆瓣:https://pypi.douban.com/simple/
2. 更换模块安装源的命令
pip config set global.index-url 地址
3. 也可以在项目中设置安装源
设置步骤如下图所示:




3. 配置QT设计器及转换工具
- 注意:路径中不能含有中文,否则可能会出现路径无法识别的问题。
1. 配置QT设计器

2. 配置将.ui文件转换成.py文件的快捷工具
下列命令的作用是将.ui文件转换为.py文件:
-o $FileNameWithoutExtension$.py $FileName$

3. 在配置以上工具时,用到的系统默认变量的解释
1. $ProjectFileDir$
- 表示文件所在的项目路径。
2. $FileDir$
- 表示文件所在的路径。
3. $FileName$
- 表示文件名(不带路径)。
4. $FileNameWithoutExtension$
- 表示没有扩展名的文件名。
4. 配置好后查看和使用工具
在菜单栏的Tools中可以看到配置的两个工具菜单:

使用“PyUIC”菜单时,必须首先选择一个.ui文件,否则,可能会出现如下图所示的错误提示,表示没有指定.ui文件。

(三)Python语言基础
参考笔记:https://www.mubucm.com/doc/1IHziL_1383
(四)创建PyQt程序
1. 创建第一个PyQt5程序
1. 认识Qt Designer
Qt Designer,中文名称为Qt设计师,它是一个强大的可视化GUI设计工具,通过使用Qt Designer设计GUI程序界面,可以大大提高开发效率。
1. 几种常见的窗口类型
(1)打开Qt Designer
前面我们已经配置了的QT设计器,点击“Tools”—>“External Tools”—>“Qt Designer”即可打开Qt Designer设计器,打开后的界面如下:

除了在PyCharm中通过扩展工具打开Qt Designer设计器,还可以通过可执行文件打开,Qt Designer的可执行文件安装在当前虚拟环境下的“Lib\site-packages\QtDesigner”路径下,名称为designer.exe,通过双击该文件,也可以打开Qt Designer设计器。
另外,为了使用方便,可以为其创建一个桌面快捷方式,具体方法为:选中designer.exe文件,单击右键,在弹出的快捷菜单中依次选择“发送到”→“桌面快捷方式”,创建designer.exe文件在系统桌面上的快捷方式:

这样,以后就可以直接在桌面上通过双击该快捷方式打开Qt Designer设计器了。
(2)打开Qt Designer设计器后,会显示“新建窗体”窗口,该窗口中以列表形式列出Qt支持的几种窗口类型:
Dialog with Buttons Bottom:按钮在底部的对话框窗口:

Dialog with Buttons Right:按钮在右上角的对话框窗口:

Dialog without Buttons:没有按钮的对话框窗口:

Main Window:一个带菜单、停靠窗口和状态栏的主窗口:

- Main Window窗口是使用PyQt5设计GUI程序时最常用的窗口,本文所有案例都将以创建Main Window窗口为基础。
Widget:通用窗口:

- Widget窗口和Main Window窗口看起来是一样的,但它们其实是有区别的,Main Window窗口会自带一个菜单栏和一个状态栏,而Widget窗口没有,默认就是一个空窗口。
2. 熟悉Qt Designer窗口区域
在Qt Designer设计器的“新建窗体”窗口中选择“Main Window”,即可创建一个主窗口,Qt Designer设计器的主要组成部分如下图所示:

1. 菜单栏
菜单栏显示了所有可用的Qt命令:

在Qt Designer的菜单栏中,最常用的是前面4个菜单,即“文件”“Edit(编辑)”“窗体”和“视图”。
-
“文件”菜单主要提供基本的“新建”“保存”“关闭”等功能菜单。

-
“Eidt(编辑)”菜单除了提供常规的“复制”“粘贴”“删除”等操作外,还提供了特定于Qt的几个菜单,即“编辑窗口部件”“编辑信号/槽”“编辑伙伴”“编辑Tab顺序”,这4个菜单主要用来切换Qt窗口的设计状态。

-
“窗体”菜单提供布局及预览窗体效果、C++代码和Python代码相关的功能。

-
“视图”菜单主要用来提供Qt常用窗口的快捷打开方式。

2. 工具栏
为了操作更方便、快捷,将菜单项中常用的命令放入了工具栏。通过工具栏可以快速地访问常用的菜单命令。

3. 工具箱
工具箱是Qt Designer最常用、最重要的一个窗口,每一个开发人员都必须对这个窗口非常熟悉。工具箱提供了进行PyQt5 GUI界面开发所必需的控件。通过工具箱,开发人员可以方便地进行可视化的窗体设计,简化程序设计的工作量,提高工作效率。根据控件功能的不同,工具箱分为8类,展开每个分类,都可以看到各个分类下包含的控件。
8类工具箱如下:

每个分类包含的控件如下:

在设计GUI界面时,如果需要使用某个控件,可以在工具箱中选中需要的控件,直接将其拖放到设计窗口的指定位置。
4. 窗口设计区域
窗口设计区域是GUI界面的可视化显示窗口,任何对窗口的改动,都可以在该区域实时显示出来。
下图所示是一个默认的MainWindow窗口,该窗口中包含一个默认的菜单和一个状态栏:

5. 对象查看器
对象查看器主要用来查看设计窗口中放置的对象列表。

6. 属性编辑器
属性编辑器是Qt Designer中另一个常用并且重要的窗口,该窗口为PyQt5设计的GUI界面提供了对窗口、控件和布局等相关属性的修改功能。设计窗口中的各个控件属性都可以在属性编辑器中设置完成。

7. 信号/槽编辑器
信号/槽编辑器主要用来编辑控件的信号和槽函数,另外,也可以为控件添加自定义的信号和槽函数。

8. 动作编辑器
动作编辑器主要用来对控件的动作进行编辑,包括提示文字、图标及图标主题、快捷键等。

9. 资源编辑器
在资源浏览器中,开发人员可以为控件添加图片(如Label、Button等的背景图片)、图标等资源。

2. 使用Qt Designer创建窗口
1. MainWindow介绍
PyQt5中有3种最常用的窗口,即MainWindows、Widget和Dialog:
- MainWindows:主窗口,主要为用户提供一个带有菜单栏、工具栏和状态栏的窗口。
- Widget:通用窗口,在PyQt5中,没有嵌入到其他控件中的控件都称为窗口。
- Dialog:对话框窗口,主要用来执行短期任务,或者与用户进行交互,没有菜单栏、工具栏和状态栏。
2. 创建主窗口
打开Qt Designer设计器,在“新建窗体”中选择MainWindow选项,然后单击“创建”按钮即可。

3. 设计主窗口
创建完主窗口后,主窗口中默认只有一个菜单栏和一个状态栏,我们要设计主窗口,只需要根据自己的需求,在左侧的“Widget Box”工具箱中选中相应的控件,然后按住鼠标左键,将其拖放到主窗口中的指定位置即可。

4. 预览窗口效果
Qt Designer设计器提供了预览窗口效果的功能,可以预览设计的窗口在实际运行时的效果,以便根据该效果进行调整设计。
具体使用方式为:在Qt Designer设计器的菜单栏中选择“窗体”→“预览于”选项,然后分别选择相应的菜单项即可,其中提供了3种风格的预览方式。

windowsvista风格:

Windows风格:

Fusion风格:

5. 查看Python代码
设计完窗口之后,可以直接在Qt Designer设计器中查看其对应的Python代码,方法是选择菜单栏中的“窗体”→“View Python Code”菜单。
出现一个显示当前窗口对应Python代码的窗体,可以直接单击窗体工具栏中的“复制全部”按钮,将所有代码复制到Python开发工具(如PyCharm)中进行使用。


6. 将.ui文件转换为.py文件
前面我们配置了将.ui文件转换为.py文件的扩展工具PyUIC,在Qt Designer窗口中就可以使用该工具将.ui文件转换为对应的.py文件,步骤如下:
(1)首先在Qt Designer设计器窗口中设计完的GUI窗口中,按Ctrl + S快捷键,将窗体UI保存到指定路径下,这里我们直接保存到创建的Python项目中。
(2)在PyCharm的项目导航窗口中选择保存的.ui文件,然后选择菜单栏中的“Tools”→“External Tool”→“PyUIC”菜单。

(3)自动将选中的.ui文件转换为同名的.py文件,双击即可查看代码。

以上的转换过程也可以在Qt Designer直接用使用复制Python代码的方式代替。
7. 运行主窗口(添加主方法)
通过上面的步骤,已经将在Qt Designer中设计的窗体转换为了.py脚本文件,但还不能运行,因为转换后的文件代码中没有程序入口,因此需要通过判断名称是否为__ main __来设置程序入口,并在其中通过MainWindow对象的show()函数来显示窗口。代码如下:
import sys
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow() # 创建窗体对象
ui = Ui_MainWindow() # 创建PyQt设计器的窗体对象
ui.setupUi(MainWindow) # 调用PyQt窗体的方法对象进行初始化设置
MainWindow.show() # 显示窗体
sys.exit(app.exec_()) # 程序关闭时退出进程
添加完上面的代码后,在当前的.py文件中单击右键,在弹出的快捷菜单中选择Run untitled,即可运行,其中的“untitled”不固定,它是.py文件的名称。
2. PyQt窗口设计基础
PyQt5窗口是向用户展示信息的可视化界面,它是GUI程序的基本单元。窗口都有自己的特征,可以通过Qt Designer可视化编辑器进行设置,也可以通过代码进行设置。本章将对PyQt5窗口程序设计的基础进行讲解,包括窗口的个性化设置、PyQt5中的信号与槽机制,以及多窗口的设计等。
1. 熟悉窗口的属性
PyQt5窗口创建完成后,可以在Qt Designer设计器中通过属性对窗口进行设置。
| 属性 | 说明 |
|---|---|
| objectName | 窗口的唯一标识,程序通过该属性调用窗口 |
| gemmetry | 使用该属性可以设置窗口的宽度和高度 |
| windowTitle | 标题栏文本 |
| windowIcon | 窗口的标题栏图标 |
| windowOpacity | 窗口的透明度,取值范围为0~1 |
| windowModlity | 窗口样式,可选值有NonModal、WindowModal和ApplicationModal |
| enabled | 窗口是否可用 |
| mininumSize | 窗口最小化时的大小,默认为0*0 |
| maxinumSize | 窗口最大化时的大小,默认为16777215 * 16777215 |
| palette | 窗口的调色板,可以用来设置窗口的背景 |
| font | 设置窗口的字体,包括字体名称、字体大小、是否为粗体、是否为斜体、是否有下划线、是否有删除线等 |
| cursor | 窗口的鼠标样式 |
| contextMenuPolicy | 窗口的快捷菜单样式 |
| acceptDrops | 是否接受拖放操作 |
| toolTip | 窗口的提示文本 |
| toolTipDuration | 窗口提示文本的显示间隔 |
| statusTip | 窗口的状态提示 |
| whatsThis | 窗口的“这是什么”提示 |
| layoutDirection | 窗口的布局方式,可选值有LeftToRight、RightToLeft、LayoutDirectionAuto |
| autoFillBackground | 是否自动填充背景 |
| styleSheet | 设置窗口样式,可用来设置窗口的背景 |
| iconSize | 窗口标题栏图标的大小 |
| toolButtonStyle | 窗口中的工具栏样式,默认值为ToolButtonIconOnly,表示默认工具栏中只显示图标,用户可以改为只显示文本,或者同时显示文本和图标 |
| dockOptions | 停靠选项 |
| unifiedTitleAndToolBarOnMac | 在Mac系统中是否可以定义标题和工具栏 |
2. 对窗口进行个性化设置
1. 基本属性设置
窗口包含一些基本的组成要素,如对象名称、图标、标题、位置和背景等,这些要素可以通过窗口的“属性编辑器”窗口进行设置,也可以通过代码实现。
1. 设置窗口的对象名称
窗口的对象名称相当于窗口的标识,是唯一的。编写代码时,对窗口的任何设置和使用都是通过该名称来操作的。在Qt Designer设计器中,窗口的对象名称是通过“属性编辑器”中的objectName属性来设置的,默认名称为MainWindow,,用户可以根据实际情况更改,但要保证在当前窗口中唯一。

除了可以在Qt Designer设计器的属性编辑器中对其进行修改之外,还可以通过Python代码进行设置,设置时需要使用setObjectName()函数。
MainWindow.setObjectName("MainWindow")

2. 设置窗口的标题栏名称
在窗口的属性中,通过windowTitle属性设置窗口的标题栏名称,标题栏名称就是显示在窗口标题上的文本。

在Python中使用setWindowTitle()函数也可以设置窗口标题栏。
MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", "窗口标题"))

3. 修改窗口的大小
在窗口的属性中,通过展开geometry属性,可以设置窗口的大小。修改窗口的大小,只需更改宽度和高度的值即可。

注意,在设置窗口的大小时,其值只能是整数,不能是小数。
&


1630

被折叠的 条评论
为什么被折叠?



