PyQt是什么?
PyQt是一个用于创建跨平台图形用户界面(GUI)应用程序的Python绑定框架。它基于Qt框架开发,Qt是一个功能强大的C++跨平台应用程序开发框架,被广泛应用于开发桌面、移动和嵌入式应用程序。PyQt几乎保持了Qt全部原有的API。
PyQt提供了一套完整的工具和组件,使开发者能够方便地利用Python语言构建功能丰富、美观、易于使用的GUI应用程序。PyQt支持所有主流的操作系统,包括Windows、MacOS、Linux以及一些嵌入式平台。它提供了许多预先设计好的用户界面控件,如按钮、文本框、下拉框、菜单等,以及绘图、动画、网络通信和多线程等丰富的功能模块。
官网链接:
本专栏【PyQt5从入门到精通】使用的环境版本:
- Python 3+
- PyQt5
PyQt的优势
-
文档齐全:PyQt是对Qt库的一个绑定,且保持了Qt库原有的API,因此PyQt除了可以使用自己的文档,也几乎可以通用Qt的文档。
-
稳定性高:PyQt使用C++开发,底层使用Qt库,因此比纯Python的GUI库更加稳定可靠。PyQt支持跨平台开发,而且保持着和Qt库的同步更新,因此在不同的操作系统和Python版本下都有良好的兼容性。
-
生态支持:PyQt拥有一个活跃的社区和丰富的第三方库支持,可以方便地实现各种功能,如数据库操作、图形绘制、图像处理等。另外,PyQt作者也开发了一些扩展包,如PyQtChart、PyQtDataVisualization等,使得绘制图表和数据可视化变得更加容易。
-
开源免费:PyQt采用LGPL开源协议,因此开发人员可以免费使用、修改和分发PyQt,也可以获得Qt的完整源代码访问权限(需要商业授权),这使得PyQt在开源界和商业界都有广泛的应用和支持。
了解PyQt的库结构
下面是PyQt5的库结构的详细介绍:
-
QtCore模块:包含了Qt的核心非GUI功能,如事件循环、定时器、线程、文件和文件夹操作、时间和日期等。这个模块是PyQt5的基础。
-
QtGui模块:包含了Qt的GUI相关功能,如窗口、窗口部件、绘图、颜色、字体、图片等。这个模块提供了创建和管理用户界面的基本工具。
-
QtWidgets模块:是PyQt5中最常用和最重要的模块,提供了一系列用户界面控件,如按钮、文本框、标签、表格、菜单、滚动条等。开发者可以利用这些控件快速构建用户界面。
-
QtMultimedia模块:用于处理多媒体相关的功能,如音频、视频、摄像头等。这个模块提供了访问和处理多媒体资源的接口。
-
QtNetwork模块:用于处理网络通信相关的功能,如TCP/IP、UDP、HTTP等。这个模块提供了与网络相关的类和方法,方便开发者进行网络编程。
-
QtSql模块:用于数据库操作,支持多种数据库系统,如SQLite、MySQL、Oracle等。这个模块提供了访问和操作数据库的功能。
-
QtWebEngine模块:用于在应用程序中嵌入Web内容,如网页浏览器、HTML5应用等。
-
QtWebEngineWidgets模块:提供了WebEngine模块的Qt Widgets集成,用于在Qt应用程序中显示和控制Web内容。
除了以上的核心模块外,PyQt5还包含了其他一些辅助模块,如QtPrintSupport(打印支持)、QtSvg(矢量图形支持)、QtTest(单元测试支持)等。这些模块提供了额外的功能,方便开发者进行更加丰富和多样化的应用程序开发。
创建第一个窗口
下面举个例子,使用PyQt创建第一个窗口:
from PyQt5.Qt import * # 导入PyQt5中的核心模块和GUI模块,“*”表示导入全部内容
import sys # 导入sys模块,用于退出应用程序
# 1、创建一个QApplication实例,作为应用程序的主对象
app = QApplication(sys.argv)
# 2、控件的操作
# 创建一个QWidget实例,即一个窗口
window = QWidget()
window.setWindowTitle("我的第一个PyQt窗口") # 设置窗口的标题
window.resize(500, 500) # 设置窗口的大小为宽500像素、高500像素
window.move(400, 200) # 设置窗口移动到屏幕的位置
# 创建一个QLabel实例,即一个文本标签
label = QLabel(window)
label.setText("Hello PyQt")
label.move(200, 200)
# 显示窗口
window.show()
# 3、进入应用程序的主事件循环
# 检测整个程序所接收到的用户的交互信息,直到调用sys.exit()退出程序
sys.exit(app.exec_())
运行结果:
程序解释
- 一个PyQt程序都需要一个应用程序对象
- 它包含主事件循环,在其中来自窗口系统和其它资源的所有事件被处理和调度。
- 它也处理应用程序的初始化和结束,并且提供对话管理。
- 它也处理绝大多数系统范围和应用程序范围的设置。
app.exec_()
意思是让程序进入主循环,不要停止。- 一个没有父对象控件默认不显示,必须要调用
show()
才能显示。 - 一个应用程序中可以显示多个顶级控件
- 如果一个Widget没有父控件,则认定为是顶级控件(顶级窗口)
- 如果想要一个控件展示在另外一个控件内部,必须要有父子关系
- 如果两个对象为父子关系,那么父对象显示之后,一般子对象会自动显示
sys.argv的作用
sys.argv
是 Python 中 sys
模块的一个变量,它是一个字符串列表,包含了命令行执行 Python 文件时传入的参数。
实例:创建一个text.py
文件,写入如下程序
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
print(app.arguments())
print(qApp.arguments())
并在Python终端运行:
结果可看到命令行打印出传入的参数,其中程序中的app
是自己创建的,而qApp
是一个全局的变量,用他们来获取命令行的参数。
因此,我们可以利用sys.argv
来通过命令行传递参数,并根据不同的参数实现相应的功能。例如,我们可以根据用户传入的参数来读取不同的配置文件,或者根据不同的参数来执行程序的不同模式或功能。
sys.exit()的作用
sys.exit()
是 Python 中 sys 模块的函数之一,它可以退出 Python 解释器。
当我们调用 sys.exit()
函数时,它将以参数(默认为 0)为返回值,然后退出正在运行的进程。即执行 sys.exit()
后,程序会立即停止,并返回到系统上一层的调用程序,返回值表示程序的退出状态。
通常情况下,我们可以使用 sys.exit()
来正常退出一个 Python 程序。例如,当程序运行结束时,我们可以在最后一行添加 sys.exit()
来保证程序的正常退出并释放程序占用的资源。
另外,在 Python 程序执行中,如果某个地方发生了严重的错误或异常,导致程序无法继续执行,我们可以使用 sys.exit()
来提前退出程序并返回错误代码。(错误代码通常不为 0,可以作为操作系统诊断问题的依据)