1。PyQt5GUI软件开发框架3。PyQt5程序自定义信号
3.PyQt5程序自定义信号3.1信号与槽的特定
在PyQt5中信号与槽的特点: 一个信号可以关联多个槽函数 一个信号可以关联其他信号 信号的参数可以是任意的Python数据类型 一个槽函数可以与多个信号关联 关联可以分为同步的或者异步的 在不同的线程之间可以建立关联 信号与槽可以断开关联 3.2自定义信号
在使用PyQt5进行程序设计时,我们可以使用PyQt5.QtCore.pyqtSignal给类定义新的信号。如果要给类定义自定义信号,该类必须是QObject的子类,同时信号必须定义为类属性。pyqtSignal句法: pyqtSignal(types[, name[, revision=0[, argiments=[]]]])
其中:
参数types表示参数类型。
其余参数都是可选项,一般不会使用。
信号的函数: connect() 关联槽函数 disconnect() 断开关联 emit() 发射信号 3.3自定义信号示例
本例通过给类定义自定义信号来演示自定义信号的使用。 # coding: utf-8 import sys from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot import json class Student(): def __init__(self, name, sex): self.__name = name self.__sex = sex def getSex(self): return self.__sex class Class(QObject): # 定义自定义信号 classNameChanged = pyqtSignal(str) studentsChanged = pyqtSignal([int], [str]) def __init__(self, parent=None): super().__init__(parent) self.__students = [] def setClassName(self, class_name): self.__className = class_name # 发射信号 self.classNameChanged.emit(self.__className) def addStudent(self, student): self.__students.append(student) # 发射信号 self.studentsChanged[int].emit(len(self.__students)) result = {"男": 0, "女": 0} for student in self.__students: if student.getSex() == "男": result["男"] += 1 if student.getSex() == "女": result["女"] += 1 # 发射信号 self.studentsChanged[str].emit(json.dumps(result)) class App(QObject): # 槽函数 @pyqtSlot(str) def do_classNameChanged(self, className): print("班级:" + className) # 槽函数 @pyqtSlot(int) def do_studentsChanged_int(self, num): print("班级总人数:" + str(num)) # 槽函数 @pyqtSlot(str) def do_studentsChanged_str(self, sData): data = json.loads(sData) print("男生人数:" + str(data["男"])) print("女生人数:" + str(data["女"])) if __name__ == "__main__": s1 = Student("赵XX", "女") s2 = Student("陈XX", "女") s3 = Student("李XX", "男") s4 = Student("秦XX", "男") s5 = Student("姜XX", "女") s6 = Student("刘XX", "男") s7 = Student("王XX", "男") a = App() c = Class() # 建立信号与槽的关联 c.classNameChanged.connect(a.do_classNameChanged) c.studentsChanged[int].connect(a.do_studentsChanged_int) c.studentsChanged[str].connect(a.do_studentsChanged_str) c.setClassName("计算机2101班") c.addStudent(s1) c.addStudent(s2) c.addStudent(s3) c.addStudent(s4) c.addStudent(s5) # 解除信号与槽的关联 c.studentsChanged[int].disconnect(a.do_studentsChanged_int) c.studentsChanged[str].disconnect(a.do_studentsChanged_str) 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型信号。
博思课堂App产品AxureRP原型编号0226博思课堂App产品AxureRP原型版权说明本站所有资料主要来源于网络的公开信息,都保留了原来的版权信息,本站所有的资料文档仅限用于学习交流,如若有侵权的嫌疑,请及时告
PPT模板资料大全集PPT模板资料包,多个行业模板,包括内容如下资源概览01hr01PPT视频教程02hr02PPT行业模板03hr03PPT背景图04hr04PPT素材05hr05海外风格模板06h
报警定位系统AxureRP原型编号0201报警定位系统AxureRP原型版权说明本站所有资料主要来源于网络的公开信息,都保留了原来的版权信息,本站所有的资料文档仅限用于学习交流,如若有侵权的嫌疑,请及时告知进行
Axure原型全集(0434)元件部分5013最全的Web设计Axure元件库5012数据图表Axure元件库5011移动端设计Axure元件库5010IPad设计Axure元件库5009最实用的Axure元件
医学博士和眼科医生研发,眼罩配上黑科技,不插电也能拯救视疲劳继颈椎病之后,用眼过度和睡眠不足,已经成了现代人的通病。我们的生活几乎被电子设备占用,工作学习娱乐放松都离不开,一个个小朋友都戴上了眼镜,视力越来越差。白天对了一整天的电脑,晚上下
懒人专用拖把,地窗两用不弯腰免手洗,再不用为谁拖地吵架身为一个社畜,回到家最糟心的事,就是还要做家务。而在所有的家务中,最令人崩溃的莫过于拖地。和对象就经常因为谁拖地这事吵架。普通的拖把用完还得手洗那种又湿又冷,还软唧唧黏糊糊的别致体
145年的中国老字号胡庆余堂,用灵芝做眼精华,抹完干纹变淡了眼睛,是人身上最有灵气的部位。关于眼睛的词语一说就是一堆,眼里有星星眉目传情小鹿眼但同时,眼周肌肤又是人身上最薄最脆弱的肌肤。随着胶原蛋白的流失而产生的鱼尾纹,眼周肌肤水分不足而长
拿了红点奖的月光宝盒数据线,一次奶三个!还自带一体式收纳仓想要好好充电太难了!!!不同牌子的电子设备需要不同接口的充电线,可充电线一多,使用更是麻烦。不仅容易缠在一起,整理收纳外出携带更是不方便,分分钟让人崩溃。外露的数据线接口,也经常因
拿了红点奖的数据线,自带一体式收纳仓,一拖三设计,超方便不同牌子的手机需要不同接口的充电线,再加上除了手机要充电,充电宝也需要,可各种线材多起来使用麻烦,外出携带更是不方便外露的数据线接口,也经常因一些乱七八糟的原因变形,甚至坏掉。现在
职工考试APP产品AxureRP原型编号0225职工考试APP产品AxureRP原型版权说明本站所有资料主要来源于网络的公开信息,都保留了原来的版权信息,本站所有的资料文档仅限用于学习交流,如若有侵权的嫌疑,请及时告
线框图入门编号8224线框图入门馆长整理资源不易,欢迎打赏,您的支持是我成长的动力!感谢!感谢!感谢!交个朋友,一起成长。获取方式在公众号内回复关键字线框图入门。版权说明本站所有资料主要来源