测试修改
This commit is contained in:
@ -22,39 +22,29 @@ from pathlib import Path
|
||||
from typing import Optional, Union
|
||||
|
||||
|
||||
# 用户口语编号 / 业务别名 → main_window 上真实属性名的映射
|
||||
# 这是"张冠李戴"修复的核心——之前代码写的 step11_panel 实际不存在,
|
||||
# 真实存在的属性见 water_quality_gui.py:1891-1928
|
||||
# 用户口语编号 / 业务别名 → PANEL_REGISTRY 中真实 step_id 的映射
|
||||
# 这是"张冠李戴"修复的核心——main_window 上已不再直接挂载 panel 属性,
|
||||
# 所有面板都通过 _panel_factory.get_panel(step_id) 懒加载访问。
|
||||
STEP_DATA_SOURCE = {
|
||||
# 数据流 step 编号(用户口语) → main_window 真实属性
|
||||
'step5_clean_output': 'step5_clean_panel',
|
||||
'step7_index_output': 'step7_index_panel',
|
||||
'step8_ml_train_output': 'step8_ml_train_panel',
|
||||
'step8_5_non_empirical': 'step8_non_empirical_panel', # 之前写错成 step11_panel
|
||||
'step9_ml_predict_output': 'step9_ml_predict_panel',
|
||||
'step10_watercolor_output': 'step10_watercolor_panel',
|
||||
'step11_ml_prediction': 'step9_ml_predict_panel', # 主流程 step11 = ML 预测
|
||||
'step12_regression_prediction': 'step8_non_empirical_panel', # 主流程 step12 = 非经验预测
|
||||
'step13_custom_regression': 'step13_report_panel', # 占位(自定义回归本身没有专属 panel)
|
||||
'sampling_csv': 'step4_sampling_panel',
|
||||
'training_spectra_csv': 'step5_clean_panel',
|
||||
'indices_csv': 'step7_index_panel',
|
||||
'models_dir': 'step8_ml_train_panel',
|
||||
'watercolor_dir': 'step10_watercolor_panel',
|
||||
'prediction_csv_dir': 'step9_ml_predict_panel', # 默认从 ML 预测读
|
||||
# 数据流 step 编号(用户口语) → PANEL_REGISTRY 中的 step_id
|
||||
'step5_clean_output': 'step5_clean',
|
||||
'step7_index_output': 'step7_index',
|
||||
'step8_ml_train_output': 'step8_ml_train',
|
||||
'step8_5_non_empirical': 'step8_ml_train',
|
||||
'step9_ml_predict_output': 'step9_ml_predict',
|
||||
'step10_watercolor_output': 'step10_watercolor',
|
||||
'step11_ml_prediction': 'step9_ml_predict', # 主流程 step11 = ML 预测
|
||||
'step12_regression_prediction': 'step8_ml_train', # 主流程 step12 = 非经验预测
|
||||
'step13_custom_regression': 'step13_report', # 自定义回归借用 step13 报告面板
|
||||
'sampling_csv': 'step4_sampling',
|
||||
'training_spectra_csv': 'step5_clean',
|
||||
'indices_csv': 'step7_index',
|
||||
'models_dir': 'step8_ml_train',
|
||||
'watercolor_dir': 'step10_watercolor',
|
||||
'prediction_csv_dir': 'step9_ml_predict', # 默认从 ML 预测读
|
||||
}
|
||||
|
||||
|
||||
def _get_widget(main_window, attr_name: str, widget_attr: str = 'output_file'):
|
||||
"""从 main_window.<attr_name> 取出指定子组件,失败时返回 None。"""
|
||||
if main_window is None:
|
||||
return None
|
||||
panel = getattr(main_window, attr_name, None)
|
||||
if panel is None:
|
||||
return None
|
||||
return getattr(panel, widget_attr, None)
|
||||
|
||||
|
||||
def _read_widget_path(widget) -> str:
|
||||
"""统一从 widget 读 path(兼容 FileSelectWidget / QLineEdit / 字符串)。"""
|
||||
if widget is None:
|
||||
@ -75,15 +65,30 @@ def _read_widget_path(widget) -> str:
|
||||
|
||||
|
||||
def resolve_step_widget(main_window, step_key: str, widget_attr: str = 'output_file'):
|
||||
"""根据业务 step_key 解析出正确的 widget(消除张冠李戴)。
|
||||
"""通过 panel_factory 访问对应面板,并获取其实际的输入/输出控件。
|
||||
|
||||
解析顺序:
|
||||
1. STEP_DATA_SOURCE[step_key] 找到真实 step_id
|
||||
2. main_window._panel_factory.get_panel(step_id) 懒加载拿到面板
|
||||
3. getattr(panel, widget_attr) 取出真实控件
|
||||
|
||||
Returns:
|
||||
widget 对象 or None(找不到时返回 None,调用方需自行兜底)
|
||||
"""
|
||||
attr_name = STEP_DATA_SOURCE.get(step_key)
|
||||
if attr_name is None:
|
||||
step_id = STEP_DATA_SOURCE.get(step_key)
|
||||
if not step_id:
|
||||
return None
|
||||
return _get_widget(main_window, attr_name, widget_attr)
|
||||
|
||||
# 从主窗口获取工厂,再由工厂通过 step_id 拿出真实面板
|
||||
factory = getattr(main_window, '_panel_factory', None)
|
||||
if not factory:
|
||||
return None
|
||||
|
||||
panel = factory.get_panel(step_id)
|
||||
if not panel:
|
||||
return None
|
||||
|
||||
return getattr(panel, widget_attr, None)
|
||||
|
||||
|
||||
_FALLBACK_DIR_TABLE = {
|
||||
|
||||
Reference in New Issue
Block a user