当前位置: 首页 > news >正文

PyQt5中重要的概念:信号与槽

PyQt中信号与槽概念定义如下(网络上引用的):

信号(signal)和槽(slot)是Qt的核心机制,也是在PyQt编程中对象之间进行通信的机制。在创建事件循环之后,通过建立信号和槽的连接就可以实现对象之间的通信。当信号发射(emit)时,连接的槽函数将会自动执行。

所谓内置信号与槽的使用。是指在发射信号时,使用窗口控件的函数,而不是自定义的函数。信号与槽的连接方法是通过QObject.signal.connect将一个QObject的信号连接到另一个QObject的槽函数。

信号与槽有三种使用方法,第一种是内置信号与槽的使用,第二种是自定义信号与槽的使用,第三种是装饰器的信号与槽的使用。

在这里插入图片描述

python 装饰器详解
【Python】*args**kwargs的用法【最全详解】

官方网站:PyQt API中信号与槽详细解释

内置信号与槽的使用

参考文章:Python Qt GUI设计:信号与槽的使用方法(基础篇—7)

Qt Designer中提供了一些最基础的信号和槽设置方法,在实际的项目开发中,信号和槽最佳的使用方式是Qt Designer和编程相结合,才能提高开发效率。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

生成python代码,

在这里插入图片描述

自定义信号与槽的使用

不适用内置信号与槽,而使用自定义信号与槽。自定义信号与槽是指在发射信号时,不使用窗口控件的函数,而是使用自定义的函数(简单地说,就是使用pyqtSignal类实例发射信号)。

在这里插入图片描述

使用方法示例如下:
PyQt5自定义信号与槽带示例讲解
在这里插入图片描述
在这里插入图片描述

关键代码:

设置信号事件:signal_single_link = pyqtSignal(str,str,str) #定义下载单条链接的信号参数(文件名,文件大小,文件进度)

定义槽函数:

def showSingalInfo(self,file_name,file_size,file_progress):self.label_txt_path.setText('文件名:'+file_name+'文件大小:'+file_size+'文件进度:'+file_progress)

使用connect()函数,绑定槽函数:self.signal_single_link.connect(self.showSingalInfo)

发送信号给槽,使用emit()函数:self.signal_single_link.emit(str(name),str(file_size),str(formatFloat§))

上述自定义信号与绑定槽操作的作用是下载过程中(单开一个线程实现下载过程),传进度返回给主线程(UI主界面是主线程)中的label控件显示
在这里插入图片描述
在这里插入图片描述

使用装饰器pyqtSlot定义信号与槽

官方网站:PyQt API中信号与槽详细解释

@pyqtSlot()有两种使用情况。文章:PyQt5 随笔:信号与槽的两种使用方法:@pyqtSlot() 和 connect()

在这里插入图片描述
在这里插入图片描述

@pyqtSlot()是这种方式的修饰关键词,他表明下面函数是信号槽函数

在这里插入图片描述

一个控件同时要写多个信号与槽函数时,只需要写一遍@pyqtSlot()关键词,中间可以有其他函数隔开。

在这里插入图片描述

引用自文章:PyQt 5信号与槽的几种高级玩法

PyQt5 连接信号与自定义槽函数,解决槽函数重复执行的问题

Qt for Python 信号和槽的使用详解,比较好理解使用装饰器生成信号事件的文章,但文章是使用PySide2来写 Qt 程序。

在这里插入图片描述

有的读者可能注意到,我们一直没有解释下面这行代码的含义:

QMetaObject.connectSlotsByName(QObject)
事实上,它是在PyQt 5中根据信号名称自动连接到槽函数的核心代码。通过前面章节中的例子可以知道,使用pyuic5命令生成的代码中会带有这么一行代码,接下来对其进行解释。

这行代码用来将QObject中的子孙对象的某些信号按照其objectName连接到相应的槽函数。这句话读起来有些拗口,这里举个例子进行简单说明。以上面例子中的代码为例:

假设代码QtCore.QMetaObject.connectSlotsByName(self)已经执行,则下面的代码:

@QtCore.pyqtSlot()    
def on_okButton_clicked(self):print( "单击了OK按钮")

会被自动识别为下面的代码(注意,函数中去掉了on,因为on会受到connectSlotsByName的影响,加上on运行时会出现问题):

def __init__(self, parent=None):self.okButton.clicked.connect(self.okButton_clicked)
def okButton_clicked(self):print("单击了OK按钮")

信号与槽的断开与连接

使用disconnect()函数可以解除信号与槽函数的绑定。

from PyQt5.QtCore import QObject , pyqtSignalclass SignalClass(QObject):# 声明无参数的信号signal1 = pyqtSignal()# 声明带一个int类型参数的信号signal2 = pyqtSignal(int)def __init__(self,parent=None):super(SignalClass,self).__init__(parent)# 将信号signal1连接到sin1Call和sin2Call这两个槽函数self.signal1.connect(self.sin1Call)self.signal1.connect(self.sin2Call)# 将信号signal2连接到信号signal1self.signal2.connect(self.signal1)# 发射信号self.signal1.emit()self.signal2.emit(1)# 断开signal1、signal2信号与各槽函数的连接self.signal1.disconnect(self.sin1Call)self.signal1.disconnect(self.sin2Call)self.signal2.disconnect(self.signal1)# 将信号signal1和signal2连接到同一个槽函数sin1Callself.signal1.connect(self.sin1Call)self.signal2.connect(self.sin1Call)# 再次发射信号self.signal1.emit()self.signal2.emit(1)def sin1Call(self):print("signal-1 emit")def sin2Call(self):print("signal-2 emit")if __name__ == '__main__':  signal = SignalClass()

运用自定义信号与槽方法的实际场景

运用自定义信号与槽方法的实际场景:信号和槽一般用于多个窗口之间传递信息, 或者前后端传递信息。

参考文章:大爽pyqt5笔记&教程 三 信号和槽 Signals & Slots 实现窗口跳转、返回、恢复、传参

使用lambda或者functools中的partial函数实现自定义参数的传递

python 中的functools.partial 使用方法

参考文章:python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例

在这里插入图片描述

import sys
from PyQt5.QtWidgets import *
from functools import partial
class WinForm(QMainWindow):def __init__(self,parent=None):super(WinForm, self).__init__(parent)#实例化两个按钮button1=QPushButton('Button1')button2=QPushButton('Button2')#todo 第一种方法#单击信号关联槽函数,利用Lanbda表达式传递一个参数# button1.clicked.connect(lambda :self.onButtonClick(1))# button2.clicked.connect(lambda :self.onButtonClick(2))##todo 第二种方法button1.clicked.connect(partial(self.onButtonClick, 1))button2.clicked.connect(partial(self.onButtonClick, 2))#实例化窗口main=QWidget()#设置窗口的布局,并向其中添加控件layout=QHBoxLayout(main)layout.addWidget(button1)layout.addWidget(button2)#设置为中央控件self.setCentralWidget(main)def onButtonClick( self,n ):#弹窗信息提示框,输出被点击的信息print("Button {0}".format(n))QMessageBox.information(self,'信息提示框','Button {0}'.format(n))
if __name__ == '__main__':app=QApplication(sys.argv)form=WinForm()form.show()sys.exit(app.exec_())

在这里插入图片描述
代码分析

重点解释

使用lambda表达式传递按钮数字给槽函数,当然还可以传递其他东西,甚至是按钮本身

button1.clicked.connect(lambda :self.onButtonClick(1))

button2.clicked.connect(lambda :self.onButtonClick(2))

另一种方法是使用functools中的partial函数

button1.clicked.connect(partial(self.onButtonClick, 1))

button2.clicked.connect(partial(self.onButtonClick, 2))

相关文章:

PyQt5中重要的概念:信号与槽

PyQt中信号与槽概念定义如下(网络上引用的): 信号(signal)和槽(slot)是Qt的核心机制,也是在PyQt编程中对象之间进行通信的机制。在创建事件循环之后,通过建立信号和槽的…...

MacOS快速安装FFmpeg,并使用FFmpeg转换视频

前言:目前正在接入flv视频流,但是没有一个合适的flv视频流地址。网上提供的flv也都不是H264AAC(一种视频和音频编解码器组合),所以想通过fmpeg来将flv文件转换为H264AAC。 一、MacOS环境 博主的MacOS环境(…...

docker部署nginx并配置https

1.准备SSL证书: 生成私钥:运行以下命令生成一个私钥文件。 生成证书请求(CSR):运行以下命令生成证书请求文件。 生成自签名证书:使用以下命令生成自签名证书。 openssl genrsa -out example.com.key 2048 …...

五一小长假,景区智慧公厕发挥了那些作用?

五一小长假已经过去,在旅途中相信大家非常开心,其中也不乏一些细节让你有了更好的体验,而在您享受美景、畅游风光的同时,或许并未留意到那个角落里,默默为您服务的智慧公厕。是的,它们将成为您旅途中不可或…...

Spring - 9 ( 10000 字 Spring 入门级教程 )

一: MyBatis XML 配置文件 Mybatis 的开发有两种方式: 注解XML 我们已经学习了注解的方式, 接下来我们学习 XML 的方式 MyBatis XML 的方式需要以下两步: 配置数据库连接字符串和 MyBatis写持久层代码 1.1 配置连接字符串和 MyBatis 此步骤需要进…...

shpfile转GeoJSON;控制shp转GeoJSON的精度;如何获取GeoJSON;GeoJSON是什么有什么用;GeoJSON结构详解(带数据示例)

目录 一、GeoJSON是什么 二、GeoJSON的结构组成 2.1、点(Point)数据示例 2.2、线(LineString)数据示例 2.3、面(Polygon)数据示例 2.4、特征(Feature)数据示例 2.5、特征集合&…...

没有强有力的科技支撑,就没有保密工作的高质量发展。新修订的《中华人民共和国保守国家秘密法》在总则中新增保密科技创新有关内容包括()

没有强有力的科技支撑,就没有保密工作的高质量发展。新修订的《中华人民共和国保守国家秘密法》在总则中新增保密科技创新有关内容包括() 点击查看答案内容: A.国家鼓励和支持保密科学技术研究和应用B.提升自主创新能力 C.明确依法保护保密领…...

【快速入门】数据库的增删改查与结构讲解

文章的操作都是基于小皮php study的MySQL5.7.26进行演示 what 数据库是能长期存储在计算机内,有组织的,可共享的大量数据的集合。数据库中的数据按照一定的数据模型存储,具有较小的冗余性,较高的独立性和易扩展性,并为…...

使用AIGC生成软件类图表

文章目录 如何使用 AI 生成软件类图表什么是 MermaidMermaid 的图片如何保存?mermaid.liveDraw.io Mermaid可以画什么图?流程图时序图 / 序列图类图状态图甘特图实体关系图 / ER图 如何使用 AI 生成软件类图表 ChatGPT 大语言模型不能直接生成各类图表。…...

机器学习实践:超市商品购买关联规则分析

第2关:动手实现Apriori算法 任务描述 本关任务:编写 Python 代码实现 Apriori 算法。 相关知识 为了完成本关任务,你需要掌握 Apriori 算法流程。 Apriori 算法流程 Apriori 算法的两个输人参数分别是最小支持度和数据集。该算法首先会生成所…...

自动化图像识别:提高效率和准确性的新途径

自动化图像识别是人工智能领域中的一项关键技术,它通过算法自动解析图像内容,为各种应用提供准确的信息。随着技术的不断发展,自动化图像识别在提高效率和准确性方面展现出新的途径。 一、深度学习技术的应用 深度学习是自动化图像识别领域…...

根据最近拒包项目总结,详细讲解Google最新政策(上)

关于占比最多的移动垃圾软件拒审问题 移动垃圾软件(Mobile Unwanted Software)特征表现1> 具有欺骗性,承诺其无法实现的价值主张。2> 诱骗用户进行安装,或搭载在用户安装的其他程序上。3> 不向用户告知其所有主要功能和重要功能。4> 以非预期方式影响用户的系统…...

【Qt之OpenGL】01创建OpenGL窗口

1.创建子类继承QOpenGLWidget 2.重写三个虚函数 /** 设置OpenGL的资源和状态,最先调用且调用一次* brief initializeGL*/ virtual void initializeGL() override; /** 设置OpenGL视口、投影等,当widget调整大小(或首次显示)时调用* brief resizeGL* param w* para…...

如何判断代理IP质量?

由于各种原因(从匿名性和安全性到绕过地理限制),代理 IP 的使用变得越来越普遍。然而,并非所有代理 IP 都是一样的,区分高质量和低质量的代理 IP 对于确保流畅、安全的浏览体验至关重要。以下是评估代理 IP 质量时需要…...

2023-2024年Web3行业报告合集(精选13份)

Web3行业报告(精选13份) 2023-2024年 来源:2023-2024年Web3行业报告合集(精选13份) 【以下是资料目录】 2023Web3产业发展现状分析及国内外落地实践报告 2023模块化区块链承载Web3.0应用的新模式 2023年AI应用需求…...

CSS中文本样式(详解网页文本样式)

目录 一、Text介绍 1.概念 2.特点 3.用法 4.应用 二、Text语法 1.文本格式 2.文本颜色 3.文本的对齐方式 4.文本修饰 5.文本转换 6.文本缩进 7.color:设置文本颜色。 8.font-family:设置字体系列。 9.font-size:设置字体大小。…...

tensorflow学习笔记(2)线性回归-20240507

通过调用Tensorflow计算梯度下降的函数tf.train.GradientDescentOptimizer来实现优化。 代码如下: #!/usr/bin/env python3 # -*- coding: utf-8 -*- #程序作用: #线性回归:通过调用Tensorflow计算梯度下降的函数tr.train.GradientDescentOptimizer来实现优化。import os …...

【JavaScript】作用域

作用域是指在程序中定义变量的区域,决定了这些变量在哪里可以被访问和使用。JavaScript 中的作用域有全局作用域、函数作用域和块级作用域。 1. 什么是作用域? 作用域是代码中定义变量的区域,它决定了变量的可见性和生命周期。作用域规定了…...

C++程序设计教案

文章目录: 一:软件安装环境 第一种:vc2012 第二种:Dev-C 第三种:小熊猫C 二:语法基础 1.相关 1.1 注释 1.2 换行符 1.3 规范 1.4 关键字 1.5 ASCll码表 1.6 转义字符 2.基本框架 2.1 第一种&…...

修改Ubuntu远程登录欢迎提示信息

无论何时登录公司的某些生产系统,你都会看到一些登录消息、警告或关于你已登录服务器的信息,如下所示。 修改方式 1.打开ubuntu终端,进入到/etc/update-motd.d目录下面 可以发现目录中的文件都是shell脚本, 用户登录时服务器会自动加载这个目录中的文件…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言:多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

跨链模式:多链互操作架构与性能扩展方案

跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层&#xf…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...