pyqt5-003
信号处理:
API:
widget信号.connect(信号槽)
obj.disconnect():
取消链接信号与槽
obj:
控件
信号
widget.blockSignal(bool):
临时(取消)组织制定控件所有的信号与槽的连接
widget.signalsBlocked():
信号是否被阻止
widget.receivers(信号):
返回连接到信号的接收器数量
应用场景:
监听信号,响应用户行为
信号与槽机制
信号:
objectNameChange(objectName) 对象名称发生改变时发生时发射此信号
destroyed(obj) 对象被销毁时,发射此信号
信号与槽机制:
信号(Signal)和槽(Slot)是Qt中的核心机制,主要作用在于对象之间进行通信
信号:
当一个控件的转台发生改变时,向外界发出的信息
槽:
一个执行某些操作的函数/方法
**所有继承自QWidget的控件都支持'信号与槽'的机制
按钮控件内置的一些方法:
pressed()长按时执行的方法
clicked()单击是执行的方法
也可以自定义信号
槽:
不同控件内置的槽函数
自定义的函数/方法
连接方式:
object信号.connect(槽函数)
特性:
一个信号可以连接多个槽函数
一个信号也可以链接临沂个信号
信号的参数可以是任何Python类型
一个槽可以监听多个信号
# 信号与槽 from PyQt5.Qt import * import sys class Window(QWidget): def __init__(self): super().__init__() self.resize(500, 500) self.setWindowTitle('QObject的学习') self.setup_ui() def setup_ui(self): self.Signal_test() def Signal_test(self): # 对象信号操作 self.obj = QObject() # def destroy_cao(obj): # print('对象被释放了',obj) # self.obj.destroyed.connect(destroy_cao) # 对象销毁时触发的事件 # del self.obj def obj_name_cao(name): print('对象名称发生了改变1', name) def obj_name_cao2(name): print('对象名称发生了改变2', name) self.obj.objectNameChanged.connect(obj_name_cao) # 对象改变时触发的事件 self.obj.objectNameChanged.connect(obj_name_cao2) # print(self.obj.receivers('对象信号不是字符串')) # 错误的打印 print('连接的信号数:', self.obj.receivers(self.obj.objectNameChanged)) self.obj.setObjectName('xxx') # self.obj.objectNameChanged.disconnect() # 断开连接,信号槽断开连接,未接受到信号 # print(self.obj.signalsBlocked(), 1) # 信号是否被阻止 # self.obj.blockSignals(True) # 临时断开连接,信号槽断开连接,未接受到信号 # self.obj.setObjectName('ooo') # print(self.obj.signalsBlocked(), 2) # 信号是否被阻止 # self.obj.blockSignals(False) # 恢复连接 # print(self.obj.signalsBlocked(), 3) # 信号是否被阻止 # self.obj.objectNameChanged(obj_name_cao) # 再次连接 # self.obj.setObjectName('xxoo') pass if __name__ == '__main__': app = QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
实例演示:
# 信号与槽操作 from PyQt5.Qt import * import sys app = QApplication(sys.argv) window = QWidget() window.resize(500,500) # ****************具体操作开始***************** # 单击按钮打印消息 # btn = QPushButton(window) # btn.setText('click') # def cao(): # print('You clicked me') # btn.clicked.connect(cao) # 更改windowTitle def cao(title): print('WindowTitleChanged',title) # window.windowTitleChanged.disconnect() # 断开连接 # window.setWindowTitle('005-'+ title) # window.windowTitleChanged.connect(cao) # 恢复连接 window.blockSignals(True) # 暂时断开连接 window.setWindowTitle('005-' + title) window.blockSignals(False) # 恢复连接 window.windowTitleChanged.connect(cao) window.setWindowTitle('005') window.setWindowTitle('004') window.setWindowTitle('003') # ****************具体操作结束***************** window.show() sys.exit(app.exec_())
King@_@