PyQt5——通过信号与槽进行数据传输

多窗口之间数据传输解决方法有两种:

  1. 主窗口获得子窗口中控件属性值
  2. 通过信号与槽传输,如https://blog.csdn.net/qq_41895747/article/details/87694817

上一篇介绍的时窗口中控件之间数据传输,下面介绍窗口之间通过信号与槽进行数据传输

# ———创建时间:2019.2.19———
# 窗口之间数据传输

import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import qdarkstyle

class DateDialog(QDialog):
    # 定义一个信号
    Signal_OneParameter=pyqtSignal(str)

    def __init__(self,parent=None):
        super(DateDialog, self).__init__(parent)
        self.setWindowTitle("子窗口,用于发射信号")

        # 添加控件
        layout=QVBoxLayout(self)
        self.label=QLabel(self)
        self.label.setText("前者发射内置信号\n后者发射自定义信号")

        self.datetime_inner=QDateTimeEdit(self)
        self.datetime_inner.setCalendarPopup(True)
        self.datetime_inner.setDateTime(QDateTime.currentDateTime())

        # 发射信号
        self.datetime_emit=QDateTimeEdit(self)
        self.datetime_emit.setCalendarPopup(True)
        self.datetime_emit.setDateTime(QDateTime.currentDateTime())

        # 布局
        layout.addWidget(self.label)
        layout.addWidget(self.datetime_emit)
        layout.addWidget(self.datetime_inner)

        # 连接槽函数
        buttons=QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel,
                                 Qt.Horizontal,self)
        buttons.accepted.connect(self.accept)
        buttons.rejected.connect(self.reject)
        layout.addWidget(buttons)

        self.datetime_emit.dateTimeChanged.connect(self.emit_signal)

    def emit_signal(self):
        date_str=self.datetime_emit.dateTime().toString()
        self.Signal_OneParameter.emit(date_str)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    form = DateDialog()
    form.show()
    app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())
    sys.exit(app.exec_())

运行如图:

信号分两种:

  1. 内置信号,缺点是只能是特定参数,如本例
  2. 自定义信号,可以有多种类型,多个参数,下一篇博客介绍

猜你喜欢

转载自blog.csdn.net/qq_41895747/article/details/87697624
今日推荐