欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PyQt5 笔记7 -- 多个类共享信号

程序员文章站 2024-01-26 22:06:59
...

PyQt5 笔记7 – 多个类共享信号


1、信号传递


  • 主窗口类中自定义信号并在构造函数中绑定槽函数
  • 实例化对话框类时把主窗口的对象传过去
  • 对话框中自定义信号并在构造函数中绑定槽函数为主窗口类中的信号触发函数
  • 当要执行主窗口类中自定义信号绑定槽函数时,只要触发当前类中的自定义信号,就可以往上传递信号了
  • 可以嵌套多层
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QDialog, QPushButton
from PyQt5.QtCore import Qt, pyqtSignal


class MainWindow(QMainWindow):
    """
    主窗口类
    """
    my_signal = pyqtSignal()

    def __init__(self, *args):
        super(MainWindow, self).__init__(*args)

        # 设置主窗口的标题及大小
        self.setWindowTitle('主窗口')
        self.resize(400, 300)

        # 创建按钮
        self.btn = QPushButton(self)
        self.btn.setText('弹出对话框')
        self.btn.clicked.connect(self.show_dialog)

        # 自定义信号绑定
        self.my_signal.connect(self.test)

        # 创建对话框对象
        self.dialog = Dialog(self)

    def show_dialog(self):
        self.dialog.show()
        self.dialog.exec()

    def test(self):
        self.btn.setText('我改变了')


class Dialog(QDialog):
    """
    对话框类
    """
    my_signal = pyqtSignal()

    def __init__(self, parent, *args):
        super(Dialog, self).__init__(*args)

        # 设置对话框的标题及大小
        self.setWindowTitle('对话框')
        self.resize(200, 200)
        self.setWindowModality(Qt.ApplicationModal)
        self.btn = QPushButton(self)
        self.btn.setText('改变主窗口按钮的名称')
        self.btn.clicked.connect(self.my_signal.emit)

        # 自定义信号绑定
        self.my_signal.connect(parent.my_signal.emit)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = MainWindow()
    demo.show()
    sys.exit(app.exec())