PyQt5自定义信号
一.简介
在 PyQt5 中,自定义信号是一个常见的任务,通常用于在对象之间传递信息或触发特定行为。自定义信号需要继承自 QtCore.pyqtSignal 并定义其参数类型。
二.操作步骤
1.导入必要的模块
from PyQt5.QtCore import QObject, pyqtSignal
2.创建自定义信号
1)继承自 QObject
2)定义信号参数的类型
class MyCustomObject(QObject):
# 定义一个没有参数的信号
signal_without_params = pyqtSignal() # 定义一个带有字符串参数的信号
signal_with_string_param = pyqtSignal(str)
3.在类中触发信号
class MyCustomObject(QObject):
# ... 信号定义 ... def some_method(self, message):
# 做一些事情...
# 然后触发带有字符串参数的信号
self.signal_with_string_param.emit(message)
4.连接信号(Singnals)到槽(Slots)
# 假设你有一个 MyCustomObject 的实例
my_obj = MyCustomObject() # 连接信号到槽
def handle_signal(message):
print(f"Received message: {message}") my_obj.signal_with_string_param.connect(handle_signal) # 触发信号
my_obj.some_method("Hello, PyQt5!")
5.pyqt5常用的信号
下面列举几个常用的信号
QPushButton.clicked() |
当按钮被点击时发出 |
QLineEdit.textChanged(str) |
当行编辑框中的文本发生变化时发出,并传递新的文本作为参数 |
QCheckBox.stateChanged(int) |
当复选框的状态发生变化时发出,传递新的状态(Qt.Unchecked, Qt.Checked, 或 Qt.PartiallyChecked)作为参数 |
QSpinBox.valueChanged(int) |
当数值框的值发生变化时发出,传递新的值作为参数 |
QSlider.valueChanged(int) |
当滑块的值发生变化时发出,传递新的值作为参数。 |
QComboBox.currentIndexChanged(int) |
当下拉列表框的当前索引发生变化时发出,传递新的索引作为参数 |
QTimer.timeout() |
当定时器超时时发出。 |
QMouseEvent |
相关的信号:如 mousePressEvent(QMouseEvent), mouseReleaseEvent(QMouseEvent), mouseMoveEvent(QMouseEvent) 等,这些信号在鼠标事件发生时由相应的控件发出。 |
QKeyEvent |
相关的信号:如 keyPressEvent(QKeyEvent), keyReleaseEvent(QKeyEvent) 等,这些信号在键盘事件发生时由相应的控件发出。 |
QCloseEvent |
相关的信号:如 closeEvent(QCloseEvent),这个信号在窗口即将关闭时发出。 |
action.triggered |
QAction 是一个代表用户界面动作的对象,比如菜单项、工具栏按钮或快捷键。triggered 是 QAction 的一个信号,当这个动作被触发时(例如,用户点击了对应的菜单项或工具栏按钮),这个信号就会被发出。 |
三.实例
import sys
from PyQt5.QtCore import QObject, pyqtSignal
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QLineEdit # 自定义信号
class MyCustomObject(QObject):
# 定义一个没有参数的信号
signal_without_params = pyqtSignal()
# 定义一个带有字符串参数的信号
signal_with_string_param = pyqtSignal(str) def some_method(self, message):
self.signal_with_string_param.emit(message) # 触发 class FileChooserApp(QMainWindow):
def __init__(self):
super().__init__()
self.initUI() def initUI(self):
self.ql = QLineEdit(self)
# self.ql.textChanged.connect(self.edit) # 当QLineEdit框内容发送变化时
self.ql.move(100, 100) self.button = QPushButton("确定", self)
self.my_obj = MyCustomObject()
self.my_obj.signal_with_string_param.connect(self.edit) # 自定义信号和槽连接
self.button.clicked.connect(lambda: self.my_obj.some_method("message")) # 点击按钮触发自定义信号
# self.button.clicked.connect(self.my_obj.some_method) # 点击按钮触发自定义信号(无参时写法) self.setGeometry(500, 500, 250, 180)
self.setWindowTitle('textChanged') def edit(self):
self.ql.setText("重新输入") if __name__ == '__main__':
app = QApplication(sys.argv)
ex = FileChooserApp()
ex.show()
sys.exit(app.exec_())
PyQt5自定义信号的更多相关文章
- 总结:PyQt5自定义信号源
定义一个信号源有4个方面要注意: 1.定义信号源 A = pyqtSignal([str], [int,str]) 这里特别使用信号源重载的情况加以说明.如上就是信号源A的重载,一个可以发送str参数 ...
- PyQt学习随笔:自定义信号连接时报AttributeError: 'PyQt5.QtCore.pyqtSignal' object has no attribute 'connect'
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 如果使用自定义信号,一定要记得信号是类变量,必须在类中定义,不能在实例 ...
- 【PyQt5-Qt Designer】pyqtSignal()-高级自定义信号与槽
PyQt 5信号与槽的几种高级玩法 参考:http://www.broadview.com.cn/article/824 from PyQt5.QtCore import QObject , pyqt ...
- 第15.19节 PyQt(Python+Qt)入门学习:自定义信号与槽连接
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 本文利用中介绍了PyQt中的信号和槽机制,除了使用PyQt组件的已有信号外,PyQt和Qt ...
- PyQt5 & PySide2信号与槽机制1
pyside2&pyqt5的信号与槽机制 1.信号与槽的两种写法 第一种情况: from PySide2 import QtWidgets, QtCore import sys if __na ...
- Qt之自定义信号和槽函数
自定义信号和槽函数: 1.类的声明和实现分别放在.h和.cpp文件中: 2.类声明包含Q_OBJECT宏: 3.信号只要声明不要设计其的实现函数 4.发射信号用emit关键字 5.自定义槽的实现与普通 ...
- linux 自定义信号
从来没试过linux自定义信号,查了下,说是系统只提供了SIGUSR1和SIGUSR2两个,就两个够吗?更要命的是如果要自定义信号如#define SIG_MYSIG ....的话要改内核才行,哥 ...
- Qt 学习之路 2(5):自定义信号槽
Home / Qt 学习之路 2 / Qt 学习之路 2(5):自定义信号槽 Qt 学习之路 2(5):自定义信号槽 豆子 2012年8月24日 Qt 学习之路 2 131条评论 上一节我们详 ...
- QT_5_ Qt中信号和槽 + 自定义信号和槽 + lambda 表达式
1.Qt中信号和槽 1.1 需求:点击按钮关闭窗口 1.2 利用connect进行链接 1.3 参数1 信号发送者(指针) 参数2 发送的信号(信号地址) 参数3 信号的接受者(指针) 参数4 处理槽 ...
- Qt5教程: (3) 自定义信号与槽
1. 自定义槽 槽可以是任何成员函数.普通全局函数.静态函数 槽函数和信号的参数和返回值要一致 由于信号是没有返回值的, 槽函数也一定没有返回值 首先在mainwidget.h中添加槽函数: publ ...
随机推荐
- selenium报错:Message: stale element reference: element is not attached to the page document
在使用selenium时,报了一个错误 报错的原因: 所引用的元素已过时,不再依附于当前页面.通常情况下,这是因为页面进行了刷新或跳转 解决方法: 重新定位元素 代码示例: # 旧代码(报错) lis ...
- Web Audio API 第4章 音调与频域
音调与频域 此章中如果对音乐部分不感兴趣,可忽略 代码部分也没有更多的新 api ,重要的还是相关的物理与声音的相关知识 到目前为止我们已经学过了声音的基础属性:定时与音量.为了能处理更复杂的的情况, ...
- 成像光谱遥感技术中的AI革命:ChatGPT在遥感领域中的应用
遥感技术主要通过卫星和飞机从远处观察和测量我们的环境,是理解和监测地球物理.化学和生物系统的基石.ChatGPT是由OpenAI开发的最先进的语言模型,在理解和生成人类语言方面表现出了非凡的能力.重点 ...
- 多线程-多个子线程执行结果插入List集合
业务场景:将多个子线程的执行结果存入List,但是总会出现List集合的长度小于子线程的执行数的情况 1.错误示例(多个线程同时操作同一个List对象,List是线程不安全) package unit ...
- HTTP 使用指南
0x1 初识 HTTP 协议 网页加载流程 graph LR A(user 输入网址)==>B(browser 进程) B==>C(处理输入信息) B-->D(页面加载完成) C== ...
- Spring Cloud Alibaba 官方实践指南【文章有点长自备咖啡茶点】
注:本文内容均转自官方文档,方便胖友们学习,不代表博主观点. 链接地址:SpringCloudAlibaba | Spring Cloud Alibaba 基于网关实现 SpringCloud 服务发 ...
- CentOS 安装openssh-6.XX
安装openssh-6.0p1 1.安装依赖包 有遇到 报ZLIB有问题的,要安装以下包 rpm -ivh zlib-devel-1.2.3-3.* rpm -ivh libsepol-devel-1 ...
- docker 应用篇————docker-compose[十九]
前言 简单介绍一下docker compose. 正文 首先进行下载一下. sudo curl -L "https://github.com/docker/compose/releases/ ...
- 重新点亮linux 命令树————权限的修改[十]
前言 简单介绍一下文件的权限修改. 正文 chmod 修改文件.目录的权限 chmod u+x /tmp/testfile chmod u-x /tmp/testfile u 表示用户 g 表示组 o ...
- Pytorch-tensor的创建,索引,切片
1.基本概念 标量:就是一个数,是0维的,只有大小,没有方向 向量:是1*n的一列数,是1维的,有大小,也有方向 张量:是n*n的一堆数,是2维的,n个向量合并而成 2.a.size(),a.shap ...