信号与槽机制是Qt中非常重要的机制,主要作用是用于对象之间的相互通信。信号Signal,槽Slot。

基本概念

信号:当一个控件的状态发生改变,向外界发出的信息。

槽:一个执行操作的函数/方法。

机制概述

首先需要手动操作(通过编程)链接信号与槽。

之后程序在运行时,链接的槽函数会自动运行。

实例

这个addNum就是槽函数,当按钮被点击时,”点击“就是信号

基本使用

简单了解一下。

信号

具体包括控件内置的一套信号,例如按钮控件的QPushButton().pressedQPushButton().clicked,分别为按下和点击信号。其他的控件也都有类似的函数。

当然,也可以去自定义信号,一般是一种组合拳,使用pyqtSignal()来定义。

不同的控件内置了不同的槽函数,也可以自定义槽函数。

连接方式

object信号.connect(槽函数)

特性

  • 一个信号可以连接多个槽函数
  • 一个信号也可以连接另一个信号
  • 信号的参数可以是任何Python类型
  • 一个槽可以监听多个信号
  • ......

QObject的信号

各个子控件有内置的信号。QObject也有自己的信号:

  • destroyed(obj):对象被销毁时发射此信号
# -*- coding: UTF-8 -*-
from PyQt5.Qt import *


class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QObject学习")
        self.resize(500, 500)
        self.setup_ui()

    def setup_ui(self):
        self.QObject_signal()

    def QObject_signal(self):
        self.obj = QObject()

        def destroy_cao():
            print("对象被释放")

        self.obj.destroyed.connect(destroy_cao)
        del self.obj


# 方便在模板里进行调试
if __name__ == "__main__":
    import sys

    app = QApplication(sys.argv)

    win1 = Window()
    win1.show()
    sys.exit(app.exec_())

应用信号与槽destroyed

  • objectNameChanged(objectName):对象名称发生变化时发射此信号
# -*- coding: UTF-8 -*-
from PyQt5.Qt import *


class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QObject学习")
        self.resize(500, 500)
        self.setup_ui()

    def setup_ui(self):
        self.QObject_signal()

    def QObject_signal(self):
        self.obj = QObject()

        # def destroy_cao():
        #     print("对象被释放")
        # self.obj.destroyed.connect(destroy_cao)
        # del self.obj

        def name_cao(name):
            print("名称发生改变,改为:", name)

        self.obj.objectNameChanged.connect(name_cao)
        self.obj.setObjectName("xxx")


# 方便在模板里进行调试
if __name__ == "__main__":
    import sys

    app = QApplication(sys.argv)

    win1 = Window()
    win1.show()
    sys.exit(app.exec_())

应用信号与槽objectNameChanged

其他的一些API

  • connect:连接信号与槽
  • disconnect:取消信号与槽的链接
  • blockSignals:临时操作,blockSignals(True)临时断开连接,blockSignals(False)恢复链接
  • receivers(信号):获取当前某个信号连接了几个槽

博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2022/SignalAndSlot1.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 06 月 24 日
如果觉得我的文章对你有用,请随意赞赏