PyQt6多窗口切换及数据汇总至__init__.py实现方案咨询
多窗口数据汇总到__init__.py的实现方案
核心思路是利用PyQt的信号与槽机制实现跨窗口数据传递,每个窗口在用户确认输入后发射包含数据的信号,主模块__init__.py接收信号并将数据存入列表。以下是具体修改步骤:
1. 修改授权窗口(authorization.py)
给窗口类添加自定义信号,在用户点击「继续」时收集数据并发射信号:
from PyQt5.QtCore import pyqtSignal from PyQt5.QtWidgets import QDialog from OST_authorization import Ui_AuthorizationDialog class AuthorizationWindow(QDialog, Ui_AuthorizationDialog): # 定义传递字典数据的自定义信号 auth_data_submitted = pyqtSignal(dict) def __init__(self, parent=None): super().__init__(parent) self.setupUi(self) self.continue_btn.clicked.connect(self.on_continue_clicked) def on_continue_clicked(self): # 从lineEdit收集数据到字典 auth_data = { "username": self.username_lineEdit.text().strip(), "password": self.password_lineEdit.text().strip(), # 补充你需要收集的其他字段 } # 发射信号传递数据 self.auth_data_submitted.emit(auth_data) # 关闭窗口(用accept()确保模态窗口正常结束) self.accept()
2. 修改任务设置窗口(task_settings.py)
同样添加自定义信号,在用户点击「开始」时收集数据并发射:
from PyQt5.QtCore import pyqtSignal from PyQt5.QtWidgets import QDialog from OST_task_settings import Ui_TaskSettingsDialog class TaskSettingsWindow(QDialog, Ui_TaskSettingsDialog): task_data_submitted = pyqtSignal(dict) def __init__(self, parent=None): super().__init__(parent) self.setupUi(self) self.start_btn.clicked.connect(self.on_start_clicked) def on_start_clicked(self): task_data = { "task_name": self.task_name_lineEdit.text().strip(), "task_interval": self.interval_spinBox.value(), # 补充其他任务设置字段 } self.task_data_submitted.emit(task_data) self.accept()
3. 修改__init__.py的主逻辑
初始化列表存储数据,依次启动窗口并连接信号接收数据:
from PyQt5.QtWidgets import QApplication from authorization import AuthorizationWindow from task_settings import TaskSettingsWindow import sys def main(): app = QApplication(sys.argv) # 用于存储两个窗口数据的列表 collected_data = [] # 处理授权窗口传递的数据 def receive_auth_data(data): collected_data.append(data) # 授权完成后打开任务设置窗口 launch_task_window() # 处理任务窗口传递的数据 def receive_task_data(data): collected_data.append(data) # 数据收集完成,可执行后续逻辑(打印、保存等) print("汇总数据:", collected_data) app.quit() def launch_task_window(): task_win = TaskSettingsWindow() task_win.task_data_submitted.connect(receive_task_data) task_win.exec() # 启动第一个授权窗口 auth_win = AuthorizationWindow() auth_win.auth_data_submitted.connect(receive_auth_data) auth_win.exec() sys.exit(app.exec_()) if __name__ == "__main__": main()
关键说明
- 采用
QDialog.exec()模态窗口方式,确保两个窗口按顺序启动,避免并行操作导致的数据混乱。 - 自定义信号是PyQt跨组件数据传递的标准方式,降低窗口间耦合性,代码更易维护。
- 每个窗口仅负责收集自身输入数据,主模块专注于数据汇总,符合单一职责设计原则。
内容的提问来源于stack exchange,提问作者dynamic.aerospace.inc
相关产品推荐
相关产品推荐

