import sys
from PyQt5.QtCore import QObject, pyqtSlot, pyqtSignal
class Human(QObject):
nameChanged = pyqtSignal(str)
ageChanged = pyqtSignal([int], [str])
def __init__(self, name='Mike', age=10, 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 35 < 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):
@pyqtSlot(int)
def do_ageChanged_int(self, age):
print(f'你的年龄是{age}')
@pyqtSlot(str)
def do_ageChanged_str(self, ageInfo):
print(ageInfo)
def do_nameChanged(self, name):
print(f'Hello {name}')
if __name__ == '__main__':
print('**创建对象时**')
boy = Human('boy', 16)
resp = Responsor()
boy.nameChanged.connect(resp.do_nameChanged)
boy.ageChanged.connect(resp.do_ageChanged_int)
boy.ageChanged[str].connect(resp.do_ageChanged_str)
print('\n**建立关联后**')
boy.setAge(35)
boy.setName('Jack')
boy.ageChanged[str].disconnect(resp.do_ageChanged_str)
print('\n**断开ageChanged[str]关联后**')
boy.setAge(10)
**创建对象时**
**建立关联后**
你的年龄是35
你是年轻人
Hello Jack
**断开ageChanged[str]关联后**
你的年龄是10