Python中的Pyqt5详细介绍:基本机构、部件、布局管理、信号与槽、跨平台

news/2024/10/28 16:53:52/

《博主简介》

小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。
更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~
👍感谢小伙伴们点赞、关注!

《------往期经典推荐------》

一、AI应用软件开发实战专栏【链接】

项目名称项目名称
1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】
3.【手势识别系统开发】4.【人脸面部活体检测系统开发】
5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】
7.【YOLOv8多目标识别与自动标注软件开发】8.【基于YOLOv8深度学习的行人跌倒检测系统】
9.【基于YOLOv8深度学习的PCB板缺陷检测系统】10.【基于YOLOv8深度学习的生活垃圾分类目标检测系统】
11.【基于YOLOv8深度学习的安全帽目标检测系统】12.【基于YOLOv8深度学习的120种犬类检测与识别系统】
13.【基于YOLOv8深度学习的路面坑洞检测系统】14.【基于YOLOv8深度学习的火焰烟雾检测系统】
15.【基于YOLOv8深度学习的钢材表面缺陷检测系统】16.【基于YOLOv8深度学习的舰船目标分类检测系统】
17.【基于YOLOv8深度学习的西红柿成熟度检测系统】18.【基于YOLOv8深度学习的血细胞检测与计数系统】
19.【基于YOLOv8深度学习的吸烟/抽烟行为检测系统】20.【基于YOLOv8深度学习的水稻害虫检测与识别系统】
21.【基于YOLOv8深度学习的高精度车辆行人检测与计数系统】22.【基于YOLOv8深度学习的路面标志线检测与识别系统】
23.【基于YOLOv8深度学习的智能小麦害虫检测识别系统】24.【基于YOLOv8深度学习的智能玉米害虫检测识别系统】
25.【基于YOLOv8深度学习的200种鸟类智能检测与识别系统】26.【基于YOLOv8深度学习的45种交通标志智能检测与识别系统】
27.【基于YOLOv8深度学习的人脸面部表情识别系统】28.【基于YOLOv8深度学习的苹果叶片病害智能诊断系统】
29.【基于YOLOv8深度学习的智能肺炎诊断系统】30.【基于YOLOv8深度学习的葡萄簇目标检测系统】
31.【基于YOLOv8深度学习的100种中草药智能识别系统】32.【基于YOLOv8深度学习的102种花卉智能识别系统】
33.【基于YOLOv8深度学习的100种蝴蝶智能识别系统】34.【基于YOLOv8深度学习的水稻叶片病害智能诊断系统】
35.【基于YOLOv8与ByteTrack的车辆行人多目标检测与追踪系统】36.【基于YOLOv8深度学习的智能草莓病害检测与分割系统】
37.【基于YOLOv8深度学习的复杂场景下船舶目标检测系统】38.【基于YOLOv8深度学习的农作物幼苗与杂草检测系统】
39.【基于YOLOv8深度学习的智能道路裂缝检测与分析系统】40.【基于YOLOv8深度学习的葡萄病害智能诊断与防治系统】
41.【基于YOLOv8深度学习的遥感地理空间物体检测系统】42.【基于YOLOv8深度学习的无人机视角地面物体检测系统】
43.【基于YOLOv8深度学习的木薯病害智能诊断与防治系统】44.【基于YOLOv8深度学习的野外火焰烟雾检测系统】
45.【基于YOLOv8深度学习的脑肿瘤智能检测系统】46.【基于YOLOv8深度学习的玉米叶片病害智能诊断与防治系统】
47.【基于YOLOv8深度学习的橙子病害智能诊断与防治系统】48.【基于深度学习的车辆检测追踪与流量计数系统】
49.【基于深度学习的行人检测追踪与双向流量计数系统】50.【基于深度学习的反光衣检测与预警系统】
51.【基于深度学习的危险区域人员闯入检测与报警系统】52.【基于深度学习的高密度人脸智能检测与统计系统】
53.【基于深度学习的CT扫描图像肾结石智能检测系统】54.【基于深度学习的水果智能检测系统】
55.【基于深度学习的水果质量好坏智能检测系统】56.【基于深度学习的蔬菜目标检测与识别系统】
57.【基于深度学习的非机动车驾驶员头盔检测系统】58.【太基于深度学习的阳能电池板检测与分析系统】
59.【基于深度学习的工业螺栓螺母检测】60.【基于深度学习的金属焊缝缺陷检测系统】
61.【基于深度学习的链条缺陷检测与识别系统】62.【基于深度学习的交通信号灯检测识别】
63.【基于深度学习的草莓成熟度检测与识别系统】64.【基于深度学习的水下海生物检测识别系统】

二、机器学习实战专栏【链接】,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】
五、YOLOv8改进专栏【链接】持续更新中~~
六、YOLO性能对比专栏【链接】,持续更新中~

《------正文------》

目录

  • 1. 基本架构
  • 2. 事件驱动编程
  • 3. Qt 对象模型
  • 4. 部件(Widgets)
  • 5. 布局管理
  • 6. 资源管理
  • 7. 信号与槽机制
  • 8. 跨平台性

PyQt5 是用于 Python 编程语言的一个绑定库,提供了对 Qt 应用程序框架的访问。它常用于开发跨平台的桌面应用程序,具有丰富的功能和广泛的控件支持。PyQt5 提供了一个功能强大且灵活的框架,可以帮助 Python 开发者迅速构建复杂的桌面应用程序。其事件驱动编程模型、丰富的控件和布局管理、强大的信号与槽机制以及跨平台能力,使得 PyQt5 成为开发桌面应用程序的理想选择。

下面对PyQt5 的基本原理进行详细介绍:

1. 基本架构

PyQt5 是 Python 和 Qt 库之间的一层接口,Python 程序员可以通过 PyQt5 访问 Qt 库的所有功能。Qt 是由 C++ 编写的跨平台软件开发框架,PyQt5 使用 SIP(一个用于创建 Python 与 C/C++ 语言之间的绑定工具)将这些功能导出到 Python。

PyQt 5的核心组件模块包括:
这些是Python的Qt绑定使用的基本模块,特别是PyQt 5。以下是模块及其说明。
QtWidget是一个pyqt 5模块类,包含了pyqt 5的大部分小部件,如按钮、标签、文本框等。它提供了创建和操作这些小部件的方法。
QtCore是pyqt5类的核心模块,包含非图形用户界面组件,如信号,插槽连接,事件循环等。它提供了应用程序的核心功能,如线程管理、定时器、文件系统操作等。
QtMultimedia是PyQt5的一个基本类,它处理多媒体内容,还提供了必要的API来访问相机功能。它允许应用程序播放音频和视频,以及处理其他多媒体内容。
QtGui是一个pyqt5模块类,包含Gui组件并扩展QtCore模块。它提供了绘制图形和文本、处理图像和字体等功能。
QtSql是一个处理SQL数据库的pyqt5模块。它支持ODBC,MySQL,Oracle,SQLite和PostgreSQL。它允许应用程序与数据库进行交互,执行SQL查询等操作。
QtNetwork是一个用于实现网络编程的pyqt5模块。它支持TCP服务器、TCP套接字、UDP套接字、SSL处理、网络会话和DNS查找。它允许应用程序进行网络通信,如发送和接收数据。

2. 事件驱动编程

PyQt5 基于事件驱动编程模型,主要通过信号(signals)和槽(slots)机制实现用户与应用程序之间的交互。当用户与 GUI 进行交互(如点击按钮、调整滑块等)时,会触发信号,这些信号可以连接到槽函数或方法,以执行特定操作。

python">from PyQt5.QtWidgets import QApplication, QPushButtondef on_click():print("Button clicked!")app = QApplication([])
button = QPushButton('Click Me')
button.clicked.connect(on_click)
button.show()
app.exec_()

3. Qt 对象模型

PyQt5 的核心是 Qt 对象模型,所有的控件和窗口部件都是从 QObject 类派生而来的。它们拥有复杂的父子关系,确保父对象在销毁时自动销毁所有子对象,避免内存泄漏。

4. 部件(Widgets)

PyQt5 提供了丰富的内置部件,如按钮、标签、文本框、表格、树、标签页等,几乎涵盖了所有常见的 GUI 控件。这些部件可以直接使用,也可以通过继承进行自定义。

python">from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayoutapp = QApplication([])window = QWidget()
layout = QVBoxLayout()label = QLabel('Hello, PyQt5!')
layout.addWidget(label)window.setLayout(layout)
window.show()
app.exec_()

5. 布局管理

PyQt5 提供了强大的布局管理功能,可以通过 QLayout 和其子类(如 QHBoxLayout, QVBoxLayout, QGridLayout)来控制部件在窗口内的摆放方式。这使得界面的设计变得灵活且易于维护。

布局管理是构建用户界面时的关键部分,它确保了窗口中的控件在调整窗口大小时能够适当地重新排列。以下是几种常见的布局管理器:

QHBoxLayout:水平布局管理器,将控件水平排列。
QVBoxLayout:垂直布局管理器,将控件垂直排列。
QGridLayout:网格布局管理器,将控件放置在网格中。
QFormLayout:表单布局管理器,用于创建标签和字段的对齐布局。
QStackedLayout:堆叠布局管理器,允许用户在多个控件之间切换显示。
以下是一个使用 QHBoxLayout 和 QVBoxLayout 的示例:

python">from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QHBoxLayoutapp = QApplication([])window = QWidget()
window.setWindowTitle('Layout Example')# 创建按钮
button1 = QPushButton('Button 1')
button2 = QPushButton('Button 2')
button3 = QPushButton('Button 3')# 创建水平布局并添加按钮
horizontal_layout = QHBoxLayout()
horizontal_layout.addWidget(button1)
horizontal_layout.addWidget(button2)
horizontal_layout.addWidget(button3)# 创建垂直布局并添加水平布局
vertical_layout = QVBoxLayout()
vertical_layout.addLayout(horizontal_layout)# 设置窗口的主布局
window.setLayout(vertical_layout)
window.show()app.exec_()

6. 资源管理

PyQt5 支持资源文件管理,可以将图像、图标、样式表等资源打包进应用程序中。资源文件通常以 .qrc 格式存储,并通过资源管理器集成到应用程序中。

资源文件 .qrc 是一个简单的 XML 文件,它定义了资源系统的结构。资源可以通过 QResource 类在运行时访问。以下是一个简单的资源文件示例:

python"><!DOCTYPE RCC><RCC version="1.0">
<qresource><file>images/background.png</file><file>stylesheets/style.css</file>
</qresource>

在 Python 代码中,你可以使用 QPixmap 来加载图像资源,或者使用 QFile 来加载样式表资源:

python">from PyQt5.QtWidgets import QApplication, QLabel
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import QResourceapp = QApplication([])# 加载图像资源
QResource.registerResource('resources.qrc')
pixmap = QPixmap(':/images/background.png')# 创建标签并设置图像
label = QLabel()
label.setPixmap(pixmap)label.show()
app.exec_()

7. 信号与槽机制

信号与槽机制是 Qt 框架的核心特性之一,它允许对象之间进行松耦合通信。通过信号可以触发槽函数来处理各种事件,使代码逻辑更加清晰和模块化。

信号是对象发送的消息,而槽是接收信号并执行特定操作的函数。在 PyQt5 中,你可以使用 QObject 的 connect 方法来连接信号和槽。以下是一个信号与槽的示例:

python">from PyQt5.QtWidgets import QApplication, QPushButtondef on_click():print("Button clicked!")app = QApplication([])button = QPushButton('Click Me')
button.clicked.connect(on_click)  # 连接信号和槽button.show()
app.exec_()

8. 跨平台性

PyQt5 的跨平台性是其最显著的特点之一。它允许开发者编写一次代码,然后在多个操作系统上运行,包括 Windows、macOS 和 Linux。这种特性使得 PyQt5 成为开发桌面应用程序的理想选择,特别是对于那些需要广泛部署的应用程序。

PyQt5 的跨平台性是通过 Qt 库实现的。Qt 库本身就被设计为跨平台的,它使用了一些技术来抽象底层操作系统的差异,并提供了一套统一的 API。PyQt5 作为 Python 的 Qt 绑定,继承了这些跨平台特性。

为了实现跨平台性,PyQt5 需要针对不同的操作系统编译不同的二进制文件。这通常意味着开发者需要为每个目标平台编译应用程序。然而,PyQt5 提供了一些工具和脚本来自动化这个过程,使得跨平台开发变得更加容易。

以下是一些关于 PyQt5 跨平台性的关键点:
统一的 API:PyQt5 提供了一套统一的 API,使得开发者可以在不同的操作系统上使用相同的代码。
自动检测平台:PyQt5 能够自动检测运行时的操作系统,并加载相应的平台插件。
资源文件:资源文件(如图像、图标和样式表)可以在 .qrc 文件中定义,并打包到应用程序中,确保在不同的操作系统上都能正确加载。
编译器支持:PyQt5 支持多种编译器,包括 MinGW、MSVC 和 GCC,这使得开发者可以在不同的平台上编译应用程序。
第三方库:PyQt5 可以与许多第三方库和工具集成,这些库和工具通常也支持跨平台。

跨平台性使得 PyQt5 成为开发桌面应用程序的理想选择,特别是对于那些需要广泛部署的应用程序。开发者可以专注于编写应用程序的业务逻辑,而不必担心底层的平台差异。


http://www.ppmy.cn/news/1542639.html

相关文章

字节面试:如何测试RocketMQ、RocketMQ?测试点有哪些?

字节面试&#xff1a;RocketMQ是怎么测试的呢&#xff1f; 答&#xff1a; 首先保证消息的消费正确、设计逆向用例&#xff0c;在验证消息内容为空等情况时的消费正确性&#xff1b; 推送大批量MQ&#xff0c;通过Admin控制台查看MQ消费的情况&#xff0c;是否出现消费假死、…

etcd之etcd分布式锁及事务(四)

1、etcd分布式锁及事务 1.1 前言 分布式锁是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中&#xff0c;常常需要协调他们的动作。如 果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源&#xff0c;那么访问这些资源的时候&#xff0c;往往需要…

基于Ubuntu24.04,下载并编译Android12系统源码 (一)

1. 前言 1.1 编译源码可以干什么 定制Android系统将最新版本的Android系统刷入到自己的Android设备中将整个系统源码导入到Android Studio中&#xff08;可以不用编译源码来实现&#xff09;。 只要有对应的Android源码版本的android.iml和android.ipr文件&#xff0c;就可以…

移动开发(五):.NET MAUI中自定义主题设置

目录 一、.NET MAUI主题设置原理 二、.NET MAUI主题设置案例 2.1 创建主题文件 2.2 修改App.xaml 文件 2.3 设置默认主题的三种方式 2.4 通过按钮切换主题 三、.NET MAUI主题设置技巧 四、总结 今天给大家分享.NET MAUI应用中如何自定义主题&#xff0c;提升APP本身个性…

我在1024谈华为

华为的发展历程与技术创新 华为自成立以来&#xff0c;一直是通信技术领域的重要参与者。让我们回顾一下华为的一些关键发展里程碑&#xff1a; 1987年&#xff0c;华为在深圳成立&#xff0c;起初专注于电话交换网络的研发和销售。 进入1990年代&#xff0c;华为转型为通信…

k8s dockers 部署 k8s运行docker

资源&#xff1a;最低配置 2G、2CPU。三台机器 准备工作&#xff1a; 1&#xff1a;关闭防火墙 systemctl stop firewalld & systemctl disable firewalld2&#xff1a;关闭Swap sed -ri s/.*swap.*/#&/ /etc/fstab3&#xff1a;关闭selinux setenforce 04&#xff…

python 深度神经网络 归一化后的数据还原 pytorch ,tensorflow

归一化后的数据还原是指将经过Min-Max归一化处理的数据恢复到原始的尺度。这需要使用归一化时的最小值和最大值。如果你在使用MinMaxScaler进行归一化&#xff0c;可以通过inverse_transform方法来还原数据。 假设你有一组归一化后的数据和一个MinMaxScaler对象&#xff0c;你…

【Qt】系统相关——多线程、Qt多线程介绍、常用函数、线程安全、网络、UDP Socket、TCP Socket

文章目录 Qt系统相关1. 多线程1.1 Qt多线程介绍1.2 常用函数1.3 线程安全 2. 网络2.1 UDP Socket2.2 TCP Socket Qt 系统相关 1. 多线程 1.1 Qt多线程介绍 QThread 代表一个在应用程序中可以独立控制的线程&#xff0c;它还可以和进程中的其他线程共享数据。QThread 对象管理…