PyQt5零基础入门(四)——信号与槽

信号与槽

  • 前言
  • 信号与槽单对单
    • 直接连接
    • 使用lambda表达式
  • 信号与槽多对多
    • 一个信号连接多个槽
    • 多个信号连接一个槽
    • 信号与信号连接
  • 自定义信号

前言

PyQt5的信号与槽是一种对象之间的通信机制,允许一个QObject对象发出信号,与之相连接的槽函数将会自动执行。信号与槽有以下几个特点:

  • 信号可以携带任意个、任意类型的参数。
  • 一个信号可以连接多个槽,即一个槽可以监听多个信号。
  • 信号与槽的连接方式可以是同步连接,也可以是异步连接。
  • 信号与槽可能会在不同的线程间连接,这时信号连接只能是异步方式。
  • 信号不是必须有槽和其连接,即信号可以不处理。
  • 信号个槽的连接可以被断开。

PyQt5使用pyqtSignal函数为QObject对象创建信号,并把信号定义为类的属性。使用connect()函数可以将信号绑定到槽函数上,使用disconnect()函数可以接触信号和槽之间的绑定。

信号与槽单对单

直接连接

import sys
from PyQt5.QtWidgets import *class Window(QWidget):def __init__(self):super(Window, self).__init__()self.btn = QPushButton("Start", self)self.btn.clicked.connect(self.change_text)def change_text(self):if self.btn.text() == "Start":self.btn.setText("Stop")else:self.btn.setText("Start")if __name__ == "__main__":app = QApplication([])window = Window()window.show()sys.exit(app.exec())

在上述代码中创建一个QPushButton对象self.btn,并将其文本设置为"Start"。这个按钮被添加到当前窗口中(由self表示)。

self.btn.clicked.connect(self.change_text): 当按钮被点击时,将调用change_text方法。在change_text的方法中根据当前按钮显示的文字改变为另一个文字。

这个简单的程序创建了一个窗口,其中包含一个可以切换其标签的按钮(“Start"和"Stop”)。每次点击按钮时,都会调用change_text方法来更改其标签。

运行结果如下,运行时按钮上的文字是Start,按下之后会变成Stop
在这里插入图片描述
在这里插入图片描述

使用lambda表达式

import sys
from PyQt5.QtWidgets import *class Window(QWidget):def __init__(self):super().__init__()btn = QPushButton("Start", self)btn.clicked.connect(lambda:btn.setText("Stop"))if __name__ == "__main__":app = QApplication([])win = Window()win.show()sys.exit(app.exec())

在上述代码中我们并没有创建新的槽函数,只采用lambda表达式来设置按钮的值。不过与上一个方法相比,这个代码只能将Start变成Stop,但是不能变回Start

运行结果与上种方式相同

信号与槽多对多

一个信号连接多个槽

import sys
from PyQt5.QtWidgets import *class Window(QWidget):def __init__(self):super(Window, self).__init__()self.btn = QPushButton("Start", self)self.btn.clicked.connect(self.change_text)self.btn.clicked.connect(self.change_size)def change_text(self):if self.btn.text() == "Start":self.btn.setText("Stop")else:self.btn.setText("Start")def change_size(self):self.btn.resize(150, 30)if __name__ == "__main__":app = QApplication([])win = Window()win.show()sys.exit(app.exec())

在代码中,按钮除了连接到了改变按钮文字的槽函数之外还连接到了更换按钮大小的槽函数,所以在按下按钮后除了改变了文字,还改变了按钮大小。

运行结果如下
在这里插入图片描述
在这里插入图片描述

多个信号连接一个槽

import sys
from PyQt5.QtWidgets import *class Window(QWidget):def __init__(self):super(Window, self).__init__()self.btn = QPushButton("Start", self)self.btn.pressed.connect(self.change_text)self.btn.released.connect(self.change_text)def change_text(self):if self.btn.text() == "Start":self.btn.setText("Stop")else:self.btn.setText("Start")if __name__ == "__main__":app = QApplication([])win = Window()win.show()sys.exit(app.exec())

在上述代码中

当按钮被按下时,会触发 pressed 信号,连接 pressed 信号到 self.change_text 函数,每次按钮被按下时,self.change_text 函数都会被调用。

当按钮被释放时,会触发 released 信号,连接 released 信号到 self.change_text 函数,每次按钮被释放时,self.change_text 函数都会被调用。

所以,self.change_text 函数会在按钮被按下和释放时都被调用。

信号与信号连接

import sys
from PyQt5.QtWidgets import *class Window(QWidget):def __init__(self):super(Window, self).__init__()self.btn = QPushButton("Start", self)self.btn.pressed.connect(self.btn.released)self.btn.released.connect(self.change_text)def change_text(self):if self.btn.text() == "Start":self.btn.setText("Stop")else:self.btn.setText("Start")if __name__ == "__main__":app = QApplication([])win = Window()win.show()sys.exit(app.exec())

在上述代码中将pressed连接到released,而released连接到了change_text。运行效果和上面代码一致

自定义信号

import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *class Window(QWidget):my_signal = pyqtSignal(int, int)def __init__(self):super().__init__()self.my_signal.connect(self.my_slot)def my_slot(self, x, y):print(x)print(y)def mousePressEvent(self, event):x = event.pos().x()y = event.pos().y()self.my_signal.emit(x, y)if __name__ == "__main__":app = QApplication([])win = Window()win.show()sys.exit(app.exec())

在PyQt5中mousePressEvent是鼠标按下时会触发的信号,我们自己定义的信号self.my_signal与槽函数my_slot相连接,当鼠标按下时,self.my_signal使用emit触发self.my_signal信号。效果就是点击窗口会输出当前鼠标位置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/630489.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

漏洞复现-科荣AIO UtilServlet任意命令执行漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

【MySQL】管理用户

DCL-管理用户 查询用户 use mysql; select * from user;创建用户 create user 用户名主机名 identified by 密码;修改用户密码 alter user 用户名主机名 identidied with mysql_native_password by 新密码;删除用户 drop user 用户名主机名;创建用户test,只能够…

地震预测系统项目实现

整个项目思路即在一组观测数据中&#xff0c;地震专家&#xff08;即用户&#xff09;输入观测窗口的最小数量和最大数量&#xff0c;进行预测峰值点 数据文件如图所示&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include<fstream> #include<string> #include&…

CSS 设置背景图片

文章目录 设置背景颜色设置背景图片背景图片偏移量计算原点背景图片尺寸设置背景图片位置设置背景图片重复方式设置背景范围设置背景图片是否跟随元素移动测试背景图片 本文概念部分参考&#xff1a;CSS背景background设置 设置背景颜色 background-color 设置背景颜色 设置…

当我们谈上下文切换时我们在谈些什么

相信不少小伙伴面试时&#xff0c;都被问到过这样一个问题&#xff1a;进程和线程的区别是什么&#xff1f;大学老师会告诉我们&#xff1a;进程是资源分配的基本单位&#xff0c;线程是调度的基本单位。说到调度&#xff0c;就不得不提到CPU的上下文切换了。 何为CPU上下文切换…

香港服务器托管:你对服务器托管了解多少?

在当今数字化的时代&#xff0c;服务器托管已成为企业和网站运营的关键一环。对于许多企业来说&#xff0c;如何选择一个安全、稳定、高效的服务器托管方案&#xff0c;成为了确保业务连续性和数据安全的重要课题。那么&#xff0c;究竟什么是服务器托管&#xff0c;它又有哪些…

使用WAF防御网络上的隐蔽威胁之扫描器

在网络安全领域&#xff0c;扫描器是用于侦察和识别网络系统漏洞的工具。 它们可以帮助网络管理员识别安全漏洞&#xff0c;也可能被攻击者用来寻找攻击目标。 扫描器的基本概念 定义&#xff1a;扫描器是一种自动化工具&#xff0c;用于探测网络和服务器中的漏洞、开放端口、…

手机崩溃日志的查找与分析

手机崩溃日志的查找与分析 摘要 本文介绍了一款名为克魔助手的iOS应用日志查看工具&#xff0c;该工具可以方便地查看iPhone设备上应用和系统运行时的实时日志和崩溃日志。同时还提供了崩溃日志的分析查看模块&#xff0c;可以对苹果崩溃日志进行符号化、格式化和分析&#x…

统计学R语言 实验3 点估计

统计学R语言 实验3 点估计 一、实验目的 1. 掌握理解点估计的相关概念和方法。 2. 掌握理解点估计的估计质量好坏判断方法。 3. 熟悉R语言等语言的集成开发环境。 二、实验分析与内容 某灯泡厂从某日生产的一批灯泡中抽取10个灯泡进行寿命试验&#xff0c;得到灯泡寿命&…

leetocode 15 三数之和

题目 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 示例…

Linux网络引导自动安装centos7

目录 一、部署PXE远程安装服务 1. 系统装机的三种引导方式 2. pxe概述 3. 实现过程 4. 搭建过程中服务介绍 4.1 TFTP服务 4.2 vsftp&#xff1a;安装系统镜像文件获取方式 4.3 syslinux 4.4 DHCP服务 5. 操作过程 二、实现Kickstart无人值守安装 1. 安装Kickstart图…

计算机三级(网络技术)——应用题

第一题 61.输出端口S0 &#xff08;直接连接&#xff09; RG的输出端口S0与RE的S1接口直接相连构成一个互联网段 对172.0.147.194和172.0.147.193 进行聚合 前三段相同&#xff0c;将第四段分别转换成二进制 11000001 11000010 前6位相同&#xff0c;加上前面三段 共30…

AI图片物体移除器:高效、便捷的AI照片物体擦除工具

在我们的日常生活中&#xff0c;照片是一种重要的记录和表达方式。然而&#xff0c;有时候我们会遇到需要将照片中的某些物体和元素去除的情况。这时候&#xff0c;传统的图像处理软件可能过于复杂&#xff0c;让人望而却步。为了解决这个问题&#xff0c;AI图片物体移除器的软…

运筹说 第104期 | 2023全球高被引科学家名单发布!

2023年11月15日&#xff0c;全球领先的专业信息服务提供商科睿唯安发布2023年度“全球高被引科学家”名单&#xff0c;遴选全球高校、研究机构和商业组织中对所在研究领域具有重大和广泛影响的顶尖科学人才。最终&#xff0c;来自全球67个国家和地区1300多个机构的6849名科学家…

Node cool 跨域问题的解决

1.问题 自己在写后端接口的时候 发现一个接口在抖音小程序上可以调用 浏览器上也可以直接打开 但是在H5 的请求中 一直就是cors error 前端报这个跨域问题 在后端 报not Found 一开始以为是找不到 经过确定 发现是跨域问题 2.解决 在全局 configuration.ts 文件里有个全局…

申请开启|成为亚马逊云科技 Community Builder,共建云端社区!

在探索由技术打造的云端世界时&#xff0c;和同行者一起学习&#xff0c;与技术专家共同探讨是开发者成长的最佳助力&#xff01; 亚马逊云科技开发者社区 Community Builders 为技术爱好者和新兴思想领袖提供技术资源、学习和交流机会&#xff0c;帮助开发者探索、分享技术相关…

详解SpringCloud微服务技术栈:Gateway网关(断言、过滤器、跨域问题)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;详解SpringCloud微服务技术栈&#xff1a;Feign远程调用、最佳实践、错误排查 &#x1f4da;订阅专栏&#xff1a;微服务技术全家…

PuTTY的ppk密钥与OpenSSH密钥之间的相互转换

几个概念说明&#xff1a;id_rsa、id_rsa.pub、ppk、pem 目前有两个主流的密钥格式&#xff1a;OpenSSH格式的密钥 和 PuTTY格式的密钥。 id_rsa和id_rsa.pub 都是OpenSSH格式的密钥。 id_rsa是OpenSSH格式的SSH私钥。 id_rsa.pub是OpenSSH格式的SSH公钥。ppk文件 ppk文件是P…

c++基础2

一、c的引用 引用和指针的的区别&#xff1f; 引用是一种更安全的指针&#xff1a; 1. 引用必须初始化&#xff0c;指针可以不用初始化 int a 10; int *p; // 指针可能是野指针 int &b a;//引用赋值"&#xff0c;通常指的是直接修改引用所引用的对象的值&#xff0…