PyQt学习------PyQt自定义信号

简介: PyQt学习------PyQt自定义信号

使用自定义信号,需要使用PyQt6.QtCore.pyqtSignal()


信号需要定义为类属性,这样定义的信号是未绑定信号

当创建类的实例后,PyQt 会自动将类的实例与信号绑定,生成了绑定的信号

一个绑定的信号具有 connect()、disconnect()和 emit()三个函数

●connect():关联槽函数


●disconnect():断开与槽函数的关联


●emit():发射信号


来举个例子吧


from PyQt6.QtCore import QObject
from PyQt6.QtCore import pyqtSignal
from PyQt6.QtCore import pyqtSlot
class Human(QObject):
    nameChanged = pyqtSignal(str)
    ageChanged = pyqtSignal([int], [str])
   
    def __init__(self, name='王红', age=32, parent =None):
        super().__init__(parent)
        self.setAge(age)
        self.setName(name)
   
    def setAge(self, age):
        self.__age=age
        self.ageChanged.emit(self.__age)
        if age<=18:
            ageInfo = "你是 少年"
        elif(18<age<=35):
            ageInfo="你是 年轻人"
        elif(25<age<=55):
            ageInfo="你是 中年人"
        elif(55<age<=80):
            ageInfo="您是 老人"
        else:
            ageInfo="您是 寿星啊"
        self.ageChanged[str].emit(ageInfo)
       
    def setName(self, name):
        self.__name=name
        self.nameChanged.emit(self.__name)
class Responsor(QObject):
    def do_nameChanged(self, name):
        print("Hello,"+name)
       
    @pyqtSlot(int)
    def do_ageChanged_int(self, age):
        print("你的年龄是:"+str(age))
       
    @pyqtSlot(str)
    def do_ageChanged_str(self, ageInfo):
        print(ageInfo)
       
       
if __name__=="__main__":
    print("**创建对象时**")
    star=Human("张三", 13)
   
    resp = Responsor()
   
    star.nameChanged.connect(resp.do_nameChanged)
    star.ageChanged.connect(resp.do_ageChanged_int)
    star.ageChanged[str].connect(resp.do_ageChanged_str)
    print("\n **建立连接后**")
   
    star.setName("李四")
    star.setAge(75)
   
    star.nameChanged.disconnect(resp.do_nameChanged)
    star.ageChanged[str].disconnect(resp.do_ageChanged_str)
    print("\n **断开name连接和age的str连接,age的int连接保留后**")
    star.setName("王五")
    star.setAge(35)

 

 

 


对代码的解释


建立连接后,当变量 self.__name 发生变化时发射了 nameChanged 信号,并且

传递了参数 self.__name

def setName(self, name):
        self.__name=name
        self.nameChanged.emit(self.__name)

这个信号关联了下列槽函数

star.nameChanged.connect(resp.do_nameChanged)

以下函数的运行产生了以上的输出

断开连接后,无法产生输出了。所以对高叶的 hello 看不到。

class Responsor(QObject):
    def do_nameChanged(self, name):
        print("Hello,"+name)

注意: overload 的信号如果都定义了槽函数,两个槽函数不能同名,连接时需要给信号加参数区分


star.ageChanged.connect(resp.do_ageChanged_int)
star.ageChanged[str].connect(resp.do_ageChanged_str)

断开连接


star.nameChanged.disconnect(resp.do_nameChanged)
 star.ageChanged[str].disconnect(resp.do_ageChanged_str)

输出结果



创建对象时虽然也发射信号,但还未建立关联,所以无响应

建立关联后,3 个信号的槽函数都响应了。我们看到了三行输出。

断开关联后,断开管理的槽函数无响应了。所以只有没断开的 int 类型槽函数还有输出。


目录
相关文章
|
26天前
|
Python 容器
Python学习的自我理解和想法(9)
这是我在B站跟随千锋教育学习Python的第9天,主要学习了赋值、浅拷贝和深拷贝的概念及其底层逻辑。由于开学时间紧张,内容较为简略,但希望能帮助理解这些重要概念。赋值是创建引用,浅拷贝创建新容器但元素仍引用原对象,深拷贝则创建完全独立的新对象。希望对大家有所帮助,欢迎讨论。
|
17天前
|
Python
Python学习的自我理解和想法(10)
这是我在千锋教育B站课程学习Python的第10天笔记,主要学习了函数的相关知识。内容包括函数的定义、组成、命名、参数分类(必须参数、关键字参数、默认参数、不定长参数)及调用注意事项。由于开学时间有限,记录较为简略,望谅解。通过学习,我理解了函数可以封装常用功能,简化代码并便于维护。若有不当之处,欢迎指正。
|
8天前
|
数据可视化 数据挖掘 大数据
1.1 学习Python操作Excel的必要性
学习Python操作Excel在当今数据驱动的商业环境中至关重要。Python能处理大规模数据集,突破Excel行数限制;提供丰富的库实现复杂数据分析和自动化任务,显著提高效率。掌握这项技能不仅能提升个人能力,还能为企业带来价值,减少人为错误,提高决策效率。推荐从基础语法、Excel操作库开始学习,逐步进阶到数据可视化和自动化报表系统。通过实际项目巩固知识,关注新技术,为职业发展奠定坚实基础。
|
28天前
|
存储 索引 Python
Python学习的自我理解和想法(6)
这是我在B站千锋教育学习Python的第6天笔记,主要学习了字典的使用方法,包括字典的基本概念、访问、修改、添加、删除元素,以及获取字典信息、遍历字典和合并字典等内容。开学后时间有限,内容较为简略,敬请谅解。
|
1月前
|
存储 程序员 Python
Python学习的自我理解和想法(2)
今日学习Python第二天,重点掌握字符串操作。内容涵盖字符串介绍、切片、长度统计、子串计数、大小写转换及查找位置等。通过B站黑马程序员课程跟随老师实践,非原创代码,旨在巩固基础知识与技能。
|
1月前
|
程序员 Python
Python学习的自我理解和想法(3)
这是学习Python第三天的内容总结,主要围绕字符串操作展开,包括字符串的提取、分割、合并、替换、判断、编码及格式化输出等,通过B站黑马程序员课程跟随老师实践,非原创代码。
|
28天前
|
Python
Python学习的自我理解和想法(7)
学的是b站的课程(千锋教育),跟老师写程序,不是自创的代码! 今天是学Python的第七天,学的内容是集合。开学了,时间不多,写得不多,见谅。
|
26天前
|
存储 安全 索引
Python学习的自我理解和想法(8)
这是我在B站千锋教育学习Python的第8天,主要内容是元组。元组是一种不可变的序列数据类型,用于存储一组有序的元素。本文介绍了元组的基本操作,包括创建、访问、合并、切片、遍历等,并总结了元组的主要特点,如不可变性、有序性和可作为字典的键。由于开学时间紧张,内容较为简略,望见谅。
|
28天前
|
存储 索引 Python
Python学习的自我理解和想法(4)
今天是学习Python的第四天,主要学习了列表。列表是一种可变序列类型,可以存储任意类型的元素,支持索引和切片操作,并且有丰富的内置方法。主要内容包括列表的入门、关键要点、遍历、合并、判断元素是否存在、切片、添加和删除元素等。通过这些知识点,可以更好地理解和应用列表这一强大的数据结构。
|
28天前
|
索引 Python
Python学习的自我理解和想法(5)
这是我在B站千锋教育学习Python的第五天笔记,主要内容包括列表的操作,如排序(`sort()`、``sorted()``)、翻转(`reverse()`)、获取长度(`len()`)、最大最小值(`max()`、``min()``)、索引(`index()`)、嵌套列表和列表生成(`range`、列表生成式)。通过这些操作,可以更高效地处理数据。希望对大家有所帮助!