信号与槽-入门应用

信号(signal)和槽(slot)是Qt的核心机制。在创建事件循环之后,通过建立信号和槽的连接就可以实现对象之间的通信。当信号发射(emit)时,连接的槽函数将会自动执行。在PyQt5中,信号和槽通过QObject.signal.connect()连接。

所有从QObject类或其子类(如QWidget)派生的类都能够包含信号和 槽。当对象改变其状态时,信号就由该对象发射出去。槽由于接收信号,但它们是普通的对象成员函数。多个信号可以与单个槽进行连接,单个信号也可以与多个槽进行连接。总之,信号和槽构建了一种强大的控件编程机制。

在Qt编程中,通过Qt信号槽机制对鼠标或键盘在界面上的操作进行响应处理,例如对鼠标单击按钮的处理。对控件发射的信号指定对应的处理槽函数的方法:第一,在窗口的UI设计中操作添加信号和槽;第二,通过代码连接信号和槽;第三种,通过Eric的“生成对话框代码”的功能产生信号和槽。

 1. 内置信号和槽函数

from PyQt5.QtWidgets import *
import sys


class WinForm(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setWindowTitle("内置的信号/槽示例")
        self.resize(330, 50)
        btn = QPushButton("关闭", self)
        btn.clicked.connect(self.close)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = WinForm()
    win.show()
    sys.exit(app.exec_())

2. 内置信号和自定义槽函数

from PyQt5.QtWidgets import *
import sys


class WinForm(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setWindowTitle("内置的信号和自定义槽函数示例")
        self.resize(330, 50)
        btn = QPushButton("关闭", self)
        btn.clicked.connect(self.btn_close)

    def btn_close(self):
        self.close()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = WinForm()
    win.show()
    sys.exit(app.exec_())

3. 自定义信号和内置槽函数

from PyQt5.QtWidgets import *
from PyQt5.QtCore import pyqtSignal
import sys


class WinForm(QWidget):
    # 自定义信号,不带参数
    button_clicked_signal = pyqtSignal()

    def __init__(self, parent=None):
        super().__init__(parent)
        self.setWindowTitle("自定义信号和槽函数示例")
        self.resize(330, 50)
        btn = QPushButton("关闭", self)
        # 连接信号与槽函数
        btn.clicked.connect(self.btn_clicked)
        # 接收信号,连接到槽函数
        self.button_clicked_signal.connect(self.close)

    def btn_clicked(self):
        # 发送自定义信号,无参数
        self.button_clicked_signal.emit()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = WinForm()
    win.show()
    sys.exit(app.exec_())

4. 自定义信号和槽函数

from PyQt5.QtWidgets import *
from PyQt5.QtCore import pyqtSignal
import sys


class WinForm(QWidget):
    # 自定义信号,不带参数
    button_clicked_signal = pyqtSignal()

    def __init__(self, parent=None):
        super().__init__(parent)
        self.setWindowTitle("自定义信号和槽函数示例")
        self.resize(330, 50)
        btn = QPushButton("关闭", self)
        # 连接信号与槽函数
        btn.clicked.connect(self.btn_clicked)
        # 接收信号,连接到自定义的槽函数
        self.button_clicked_signal.connect(self.btn_close)

    def btn_clicked(self):
        # 发送自定义信号,无参数
        self.button_clicked_signal.emit()

    def btn_close(self):
        self.close()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = WinForm()
    win.show()
    sys.exit(app.exec_())

 

posted @ 2020-08-10 13:49  Laney_Sun  阅读(253)  评论(0编辑  收藏  举报