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 ...
随机推荐
- HarmonyOS SDK开放能力,服务鸿蒙生态建设,打造优质应用体验
华为开发者大会2023(HDC.Together)于8月4日至6日在东莞松山湖举行,在HarmonyOS端云开放能力技术分论坛上,华为为广大开发者们介绍了HarmonyOS SDK开放能力在基础开发架 ...
- openGauss Cluster Manager RTO Test
一.环境介绍 软件环境 类别 版本 下载链接 备注 OS openEuler 20.03 (LTS) https://repo.openeuler.org/openEuler-20.03-LTS/IS ...
- .NET MAUI开源免费的UI工具包 - Uranium
前言 一直有小伙伴在微信公众号后台留言让我分享一下.NET MAUI相关的UI框架,今天大姚分享一个.NET MAUI开源.免费的UI工具包:Uranium. Uranium介绍 Uranium是一个 ...
- 浅析eTS的起源和演进
原文:https://mp.weixin.qq.com/s/N2RPeboN8Fj0-8wBMZJ-7w,点击链接查看更多技术内容. 引言 Mozilla创造了JS,Microsoft创建了TS,Hu ...
- Go 单元测试基本介绍
目录 一.单元测试基本介绍 1.1 什么是单元测试? 1.2 如何写好单元测试 1.3 单元测试的优点 1.4 单元测试的设计原则 二.Go语言测试 2.1 Go单元测试概要 2.2 Go单元测试基本 ...
- argparse命令行参数的使用
import argparse def main(): #设置一些参数 parser = argparse.ArgumentParser() parser.add_argument('--device ...
- 如何基于Django中的WebSockets和异步视图来实现实时通信功能
本文分享自华为云社区<结合Django中的WebSockets和异步视图实现实时通信功能的完整指南>,作者: 柠檬味拥抱. 在现代Web应用程序中,实时通信已经成为了必不可少的功能之一.无 ...
- Oracle 在PL/SQL将字符串分割输出
Oracle 在PL/SQL将字符串分割输出 示例如下: declare begin for maina in (select tt.line ll from (select regexp_subst ...
- resin报错:java.lang.IllegalStateException: block Block
java.lang.IllegalStateException: block Block 启动resin时报错 主要的提示信息就是下面这个 java.lang.IllegalStateExceptio ...
- 【笔记】go语言--接口
[笔记]go语言--接口 接口的概念 强类型语言:熟悉接口的概念 弱类型语言:没(少)有接口的概念 接口的详解︰使用Google Guice实现依赖注入 curl 是获取http请求的命令工具 cur ...