You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 10:52:33