多窗口之间数据传输解决方法有两种:
- 主窗口获得子窗口中控件属性值
- 通过信号与槽传输,如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_())
运行如图:
信号分两种:
- 内置信号,缺点是只能是特定参数,如本例
- 自定义信号,可以有多种类型,多个参数,下一篇博客介绍