fix: Step 7 路由 + 发送端字符串对齐(消除 KeyError)+ 配套防御性补强

核心修复

- panel_registry: step7_index class_ref 换绑 Step7View(最小侵入式对位,保持 step_id 保护全项目 18 处下游引用)

- step7_view._on_run_single_clicked: 'step7' → 'step7_index'(wrapped_config key + step_name 同步对齐,消除 PipelineScheduler 抛 KeyError "未注册的步骤: 'step7'")

配套防御性补强

- pipeline_executor.run_single_step_handler: 后台 is_running 时改 QMessageBox 警告 + LogMessage,防多次点击死锁

- worker_thread.run_single_step: 兼容嵌套/扁平 config 格式,嵌套子 dict 为空时回退扁平读取

- 公式 ListWidget layout 修复:setUniformItemSizes + stretch=1 + update(),消除 step7_view 加载后坍塌/不刷新
This commit is contained in:
DXC
2026-06-18 13:59:20 +08:00
parent f61a3dfb1d
commit f93dbeb848
5 changed files with 44 additions and 8 deletions

View File

@ -129,9 +129,10 @@ class Step7View(BaseView):
self.formula_list.setSelectionMode(QListWidget.MultiSelection)
self.formula_list.setMinimumHeight(300)
self.formula_list.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
self.formula_list.setUniformItemSizes(True)
# view 层不需要 itemChanged 副作用service 接管时再启用
self.formula_list.blockSignals(True)
formula_outer_layout.addWidget(self.formula_list)
formula_outer_layout.addWidget(self.formula_list, stretch=1)
self.formula_group.setLayout(formula_outer_layout)
layout.addWidget(self.formula_group)
@ -233,6 +234,8 @@ class Step7View(BaseView):
self.index_checkboxes[name] = item
self.formula_list.blockSignals(False)
self.formula_list.adjustSize()
self.formula_list.updateGeometry()
self.update()
for btn in (self.select_all_btn, self.deselect_all_btn,
self.select_ratio_btn, self.select_conc_btn, self.refresh_button):
@ -319,6 +322,14 @@ class Step7View(BaseView):
# 执行入口
# ------------------------------------------------------------------
def _on_run_single_clicked(self):
from src.gui.core.event_bus import global_event_bus
config = self.get_config()
global_event_bus.publish('RequestRunSingleStep', {'step_name': 'step7', 'config': config})
import traceback
print("==== Step 7 计算按钮物理按下 ====", flush=True)
try:
from src.gui.core.event_bus import global_event_bus
config = self.get_config()
wrapped_config = {'step7_index': config}
global_event_bus.publish('RequestRunSingleStep', {'step_name': 'step7_index', 'config': wrapped_config})
except Exception as e:
traceback.print_exc()
from PyQt5.QtWidgets import QMessageBox
QMessageBox.critical(self, "Step7 发射失败", f"收集配置或发送请求时异常:\n\n{e}")