一.简介

在 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.UncheckedQt.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自定义信号的更多相关文章

  1. 总结:PyQt5自定义信号源

    定义一个信号源有4个方面要注意: 1.定义信号源 A = pyqtSignal([str], [int,str]) 这里特别使用信号源重载的情况加以说明.如上就是信号源A的重载,一个可以发送str参数 ...

  2. PyQt学习随笔:自定义信号连接时报AttributeError: 'PyQt5.QtCore.pyqtSignal' object has no attribute 'connect'

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 如果使用自定义信号,一定要记得信号是类变量,必须在类中定义,不能在实例 ...

  3. 【PyQt5-Qt Designer】pyqtSignal()-高级自定义信号与槽

    PyQt 5信号与槽的几种高级玩法 参考:http://www.broadview.com.cn/article/824 from PyQt5.QtCore import QObject , pyqt ...

  4. 第15.19节 PyQt(Python+Qt)入门学习:自定义信号与槽连接

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 本文利用中介绍了PyQt中的信号和槽机制,除了使用PyQt组件的已有信号外,PyQt和Qt ...

  5. PyQt5 & PySide2信号与槽机制1

    pyside2&pyqt5的信号与槽机制 1.信号与槽的两种写法 第一种情况: from PySide2 import QtWidgets, QtCore import sys if __na ...

  6. Qt之自定义信号和槽函数

    自定义信号和槽函数: 1.类的声明和实现分别放在.h和.cpp文件中: 2.类声明包含Q_OBJECT宏: 3.信号只要声明不要设计其的实现函数 4.发射信号用emit关键字 5.自定义槽的实现与普通 ...

  7. linux 自定义信号

    从来没试过linux自定义信号,查了下,说是系统只提供了SIGUSR1和SIGUSR2两个,就两个够吗?更要命的是如果要自定义信号如#define SIG_MYSIG   ....的话要改内核才行,哥 ...

  8. Qt 学习之路 2(5):自定义信号槽

    Home / Qt 学习之路 2 / Qt 学习之路 2(5):自定义信号槽 Qt 学习之路 2(5):自定义信号槽  豆子  2012年8月24日  Qt 学习之路 2  131条评论 上一节我们详 ...

  9. QT_5_ Qt中信号和槽 + 自定义信号和槽 + lambda 表达式

    1.Qt中信号和槽 1.1 需求:点击按钮关闭窗口 1.2 利用connect进行链接 1.3 参数1 信号发送者(指针) 参数2 发送的信号(信号地址) 参数3 信号的接受者(指针) 参数4 处理槽 ...

  10. Qt5教程: (3) 自定义信号与槽

    1. 自定义槽 槽可以是任何成员函数.普通全局函数.静态函数 槽函数和信号的参数和返回值要一致 由于信号是没有返回值的, 槽函数也一定没有返回值 首先在mainwidget.h中添加槽函数: publ ...

随机推荐

  1. HarmonyOS SDK开放能力,服务鸿蒙生态建设,打造优质应用体验

    华为开发者大会2023(HDC.Together)于8月4日至6日在东莞松山湖举行,在HarmonyOS端云开放能力技术分论坛上,华为为广大开发者们介绍了HarmonyOS SDK开放能力在基础开发架 ...

  2. openGauss Cluster Manager RTO Test

    一.环境介绍 软件环境 类别 版本 下载链接 备注 OS openEuler 20.03 (LTS) https://repo.openeuler.org/openEuler-20.03-LTS/IS ...

  3. .NET MAUI开源免费的UI工具包 - Uranium

    前言 一直有小伙伴在微信公众号后台留言让我分享一下.NET MAUI相关的UI框架,今天大姚分享一个.NET MAUI开源.免费的UI工具包:Uranium. Uranium介绍 Uranium是一个 ...

  4. 浅析eTS的起源和演进

    原文:https://mp.weixin.qq.com/s/N2RPeboN8Fj0-8wBMZJ-7w,点击链接查看更多技术内容. 引言 Mozilla创造了JS,Microsoft创建了TS,Hu ...

  5. Go 单元测试基本介绍

    目录 一.单元测试基本介绍 1.1 什么是单元测试? 1.2 如何写好单元测试 1.3 单元测试的优点 1.4 单元测试的设计原则 二.Go语言测试 2.1 Go单元测试概要 2.2 Go单元测试基本 ...

  6. argparse命令行参数的使用

    import argparse def main(): #设置一些参数 parser = argparse.ArgumentParser() parser.add_argument('--device ...

  7. 如何基于Django中的WebSockets和异步视图来实现实时通信功能

    本文分享自华为云社区<结合Django中的WebSockets和异步视图实现实时通信功能的完整指南>,作者: 柠檬味拥抱. 在现代Web应用程序中,实时通信已经成为了必不可少的功能之一.无 ...

  8. Oracle 在PL/SQL将字符串分割输出

    Oracle 在PL/SQL将字符串分割输出 示例如下: declare begin for maina in (select tt.line ll from (select regexp_subst ...

  9. resin报错:java.lang.IllegalStateException: block Block

    java.lang.IllegalStateException: block Block 启动resin时报错 主要的提示信息就是下面这个 java.lang.IllegalStateExceptio ...

  10. 【笔记】go语言--接口

    [笔记]go语言--接口 接口的概念 强类型语言:熟悉接口的概念 弱类型语言:没(少)有接口的概念 接口的详解︰使用Google Guice实现依赖注入 curl 是获取http请求的命令工具 cur ...