🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 简介 信号和槽机制是QT的核心机制,它是一种**高级接口**,应用于**对象之间的通信**,他是QT的核心特性 **信号和槽机制** * 信号和槽是用来在对象间传递数据的方法:当一个特定事件发生的时候,**signal会被emit出来**,**slot**调用是用来响应相应的signal的 * Qt中对象已经包含了许多预定义的signal(基本组件都有各自特有的预定义的信号),Qt的对象中也已经包含了许多预定义的槽函数 **信号** * 当对象的**状态**发生改变的时候,信号就由该对象发射(emit)出去 * 当一个信号被发射(emit),与其关联的**槽函数被立即执行**,发射该信号的对象并不知道是那个对象在接收这个信号.这样保证了对象与对象之间的低耦合 * 如果信号和**多个槽函数**相关联,当信号被发射时,这些槽的执行顺序将会是**随机的,不确定的** **槽** * 用于接收信号,而且槽只是**普通的成员函数**.当和槽连接的信号被发射时,槽会被调用 * 一个槽并不知道是否有任何信号与自己相连接 **信号和槽的绑定** * 通过调用QObject对象的**connect**函数来将对象的信号与另外一个对象的槽函数相关联,当发射者发射信号时,接收者的槽函数将被调用 **信号和槽** * 信号和槽连接通过**connect方法** * 槽函数可以是**成员方法**或者**lambda**表达式 **获取信号发送者** * 可以通过sender()找到信号的发送者 # 例子 ~~~ from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * import sys # 槽函数 def showMsg(): # 想要知道是那个发送者 sender = widget.sender() print(sender) # 获取发送者上的文本 print(sender.text()) print('hello') # 修改按钮文字为发送邮件 sender.setText('发送邮件') # 创建个应用程序 需要加上参数 app = QApplication(sys.argv) # 创建窗口 widget = QWidget() # 修改窗口大小 widget.resize(300, 400) # 设置窗口的标题 widget.setWindowTitle('信号和槽练习') # 创建按钮 button = QPushButton() # 设置按钮文字 button.setText('按钮-调用槽') # 将信号和槽函数关联 button.clicked.connect(showMsg) # 用lambda # button.clicked.connect(lambda :print('hello')) # 显示按钮 button.setParent(widget) # 显示窗口 widget.show() # 系统安全退出 sys.exit(app.exec()) ~~~ # 槽函数使用系统函数 ~~~ from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * import sys # 定义槽函数 def close(): print('关闭窗口') # 退出程序 app.quit() # 创建个应用程序 需要加上参数 app = QApplication(sys.argv) # 创建窗口 widget = QWidget() # 修改窗口大小 widget.resize(300, 400) # 设置窗口的标题 widget.setWindowTitle('使用Qt槽函数') # 创建个按钮 button = QPushButton() # 挂到页面上 button.setParent(widget) # 文本 button.setText('关闭窗口') # 点击信号 # button.clicked.connect(close) # 这边的quit不能带(),带()就已经执行了,我们要的是等他发送信号才执行 button.clicked.connect(app.quit) # 显示窗口 widget.show() # 系统安全退出 sys.exit(app.exec()) ~~~