PyQt5学习笔记-03

信号槽的简介

Posted by hmoytx on May 2, 2018

信号槽机制简介

信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性。所有从 QObject 或其子类 ( 例如 Qwidget) 派生的类都能够包含信号和槽。当对象改变其状态时,信号就由该对象发射出去,它不用知道另一端是谁在接收这个信号。这就是真正的信息封装,它确保对象被当作一个真正的软件组件来使用。槽用于接收信号,但它们是普通的对象成员函数。一个槽并不知道是否有任何信号与自己相连接。而且,对象并不了解具体的通信机制。信号与槽之间可以一对一也可以多对一或者一对多。

具体实现

使用自带的槽函数

这样讲起来很乱,因为基本都是从网上找的,还是直接用例子来说明。 点击工具栏上的“编辑信号/槽”,进入信号槽编辑模式,我们可以直接在发送者(button)上按住鼠标左键不放,拖动到接收者(Form窗体)上。这样就建立起了连接。 信号槽示意图 信号槽示意图2 然后选择继承,然后可以选择触发信号与执行的槽函数,这里选择close()。 信号槽示意图3 点击按钮后,按钮对象会发送一个信号到Form窗口,窗口接收到信号后执行槽函数 这样实现的的是点击按钮后窗口关闭。

使用自定义槽函数

流程如下

import sys
from PyQt5 import QtWidgets, QtCore
from demo import Ui_Form    #这里导入的是经过pyuic转换的ui文件


class mainwindow(QtWidgets.QWidget, Ui_Form):
    def __init__(self):
        super(mainwindow, self).__init__()
        self.setupUi(self)
        self.pushButton.clicked.connect(self.myprint) #槽函数不用加()
    def myprint(self):
        print("-----print-----")    

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = mainwindow()
    window.show()
    sys.exit(app.exec_())

注意

槽函数就是一个方法,可以使普通的成员函数,也可以是匿名函数。信号的connect最好放在__init__中,若在方法中定义需要disconnect,防止多次连接的情况发生。