From 1824d62d1028e6fc19bc6d136d3c22e592a6acdb Mon Sep 17 00:00:00 2001 From: duxin Date: Wed, 1 Jul 2026 15:12:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E7=BB=9F=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/workspace_manager.py | 5 +++++ src/gui/core/workspace_initializer.py | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/src/core/workspace_manager.py b/src/core/workspace_manager.py index 03edd6d..2bc5724 100644 --- a/src/core/workspace_manager.py +++ b/src/core/workspace_manager.py @@ -46,6 +46,11 @@ class WorkspaceManager: } self.step_outputs = {} + # ★ 2026-07-01:切换工作目录时清空缓存,防止旧目录的 OutputUpdated 重放 + def clear_all_outputs(self): + """清空所有缓存的步骤输出路径。工作目录切换时调用。""" + self.step_outputs.clear() + def _publish_outputs(self, step_id: str, outputs: dict): """将发现的产出发布到 EventBus。 diff --git a/src/gui/core/workspace_initializer.py b/src/gui/core/workspace_initializer.py index a5781d4..9f77867 100644 --- a/src/gui/core/workspace_initializer.py +++ b/src/gui/core/workspace_initializer.py @@ -284,6 +284,9 @@ class WorkspaceInitializer(QObject): 这些残留路径不会被自动更新。此方法遍历所有已加载面板, 清除以旧 work_dir 开头的输出路径,确保后续 auto_populate_all() 能重新填充。 + 同时清空 WorkspaceManager 的 step_outputs 缓存, + 防止旧目录的 OutputUpdated 事件在面板懒加载时被重放。 + 安全设计: - 仅清除以旧 work_dir 开头的路径(保留用户手动指定的外部路径) - 使用 os.path.normpath 归一化比较,兼容正反斜杠混用 @@ -292,6 +295,9 @@ class WorkspaceInitializer(QObject): if not norm_old: return + # ★ 清空 WorkspaceManager 缓存,斩断旧目录的 OutputUpdated 重放链 + self._workspace_manager.clear_all_outputs() + cleared_count = 0 for step_id, panel in self._panel_factory.get_loaded_panels().items(): # 遍历面板中常见的输出/路径控件