3。PyQt5程序自定义信号3。1信号与槽的特定 在PyQt5中信号与槽的特点:一个信号可以关联多个槽函数一个信号可以关联其他信号信号的参数可以是任意的Python数据类型一个槽函数可以与多个信号关联关联可以分为同步的或者异步的在不同的线程之间可以建立关联信号与槽可以断开关联3。2自定义信号 在使用PyQt5进行程序设计时,我们可以使用PyQt5。QtCore。pyqtSignal给类定义新的信号。如果要给类定义自定义信号,该类必须是QObject的子类,同时信号必须定义为类属性。pyqtSignal句法:pyqtSignal(types〔,name〔,revision0〔,argiments〔〕〕〕〕) 其中: 参数types表示参数类型。 其余参数都是可选项,一般不会使用。 信号的函数:connect()关联槽函数disconnect()断开关联emit()发射信号3。3自定义信号示例 本例通过给类定义自定义信号来演示自定义信号的使用。coding:utf8importsysfromPyQt5。QtCoreimportQObject,pyqtSignal,pyqtSlotimportjsonclassStudent():definit(self,name,sex):self。namenameself。sexsexdefgetSex(self):returnself。sexclassClass(QObject):定义自定义信号classNameChangedpyqtSignal(str)studentsChangedpyqtSignal(〔int〕,〔str〕)definit(self,parentNone):super()。init(parent)self。students〔〕defsetClassName(self,classname):self。classNameclassname发射信号self。classNameChanged。emit(self。className)defaddStudent(self,student):self。students。append(student)发射信号self。studentsChanged〔int〕。emit(len(self。students))result{男:0,女:0}forstudentinself。students:ifstudent。getSex()男:result〔男〕1ifstudent。getSex()女:result〔女〕1发射信号self。studentsChanged〔str〕。emit(json。dumps(result))classApp(QObject):槽函数pyqtSlot(str)defdoclassNameChanged(self,className):print(班级:className)槽函数pyqtSlot(int)defdostudentsChangedint(self,num):print(班级总人数:str(num))槽函数pyqtSlot(str)defdostudentsChangedstr(self,sData):datajson。loads(sData)print(男生人数:str(data〔男〕))print(女生人数:str(data〔女〕))ifnamemain:s1Student(赵XX,女)s2Student(陈XX,女)s3Student(李XX,男)s4Student(秦XX,男)s5Student(姜XX,女)s6Student(刘XX,男)s7Student(王XX,男)aApp()cClass()建立信号与槽的关联c。classNameChanged。connect(a。doclassNameChanged)c。studentsChanged〔int〕。connect(a。dostudentsChangedint)c。studentsChanged〔str〕。connect(a。dostudentsChangedstr)c。setClassName(计算机2101班)c。addStudent(s1)c。addStudent(s2)c。addStudent(s3)c。addStudent(s4)c。addStudent(s5)解除信号与槽的关联c。studentsChanged〔int〕。disconnect(a。dostudentsChangedint)c。studentsChanged〔str〕。disconnect(a。dostudentsChangedstr)c。addStudent(s6)c。addStudent(s7) 运行程序,输出的结果如下:班级:计算机2101班班级总人数:1男生人数:0女生人数:1班级总人数:2男生人数:0女生人数:2班级总人数:3男生人数:1女生人数:2班级总人数:4男生人数:2女生人数:2班级总人数:5男生人数:2女生人数:3 在使用信号与槽的时候,需要特别注意的几点: 1。PyQt5中类的内建overload型信号,一般只选择其中一种信号编写槽函数,如果使用非默认参数类型的信号,槽函数需要使用pyqtSlot()修饰符声明参数类型。 2。自定义信号时,尽量不定义overload型信号。