|
|
2d45610aa6
|
fix: 导航状态锁防抖 + 运行按钮中间槽函数(修复乱跳与无响应双 Bug)
Bug1 导航乱跳:_on_step_list_changed 先调 get_panel 触发懒加载再 setCurrentIndex,避免 removeTab/insertTab 索引偏移导致跳页错乱。_on_tab_changed 加 _is_syncing 守卫斩断乒乓效应。Bug2 按钮无响应:新增 _on_run_all_clicked 中间槽函数替代直接连接,内含 print 探针 + try/except 兜底。
|
2026-06-18 09:01:25 +08:00 |
|
|
|
f1cc339d4a
|
feat: Step2~Step7 Handler 批量生成 + WorkerThread 接入新调度器
- 新增 6 个 Handler:Step2GlintDetection / Step3GlintRemoval / Step4Sampling / Step5ProcessCsv / Step6ExtractSpectra / Step7CalcIndices
- 新增 register_handlers.py:register_all_handlers() 一键注册 Step1~Step7
- 更新 __init__.py:导出全部 7 个 Handler
- 重构 worker_thread.py:移除旧 WaterQualityInversionPipeline 导入,改用 PipelineScheduler + register_all_handlers
- run_single_step 改为 scheduler.run_step() 调用,保留外部模型透传逻辑
|
2026-06-17 18:02:31 +08:00 |
|
|
|
f6455b71ba
|
fix: PanelFactory 信号风暴修复 + 后端上帝类肢解(BaseStepHandler/调度器/Step1打样)
|
2026-06-17 17:48:40 +08:00 |
|
|
|
39e8c29913
|
refactor: 实现第二批 Manager(LogManager/ConfigManager/DialogService/TrainingModeManager)
- log_manager.py: 日志区+进度条+清空按钮封装,内部订阅 LogMessage/ProgressUpdate
- config_manager.py: 配置读写(new/load/save/get_current_config),懒加载安全(未加载面板返回 {})
- dialog_service.py: 纯展示弹窗封装(Pipeline状态/关于/AI设置)
- training_mode_manager.py: 训练模式切换,发布 TrainingModeChanged 事件
- water_quality_gui_v2.py: 725→605 行,菜单回调全部委托给 Manager,移除 _create_log_panel/_create_progress_panel/_on_log_message/_on_progress_update
|
2026-06-17 17:35:27 +08:00 |
|
|
|
19c86e6e44
|
refactor: 实现纯壳主窗口 + 第一批 Manager(PanelFactory/PipelineExecutor/WorkspaceInitializer)
- water_quality_gui_v2.py: 纯壳主窗口(725行),依赖注入链 + EventBus 驱动,7个菜单连线
- panel_factory.py: PanelFactory 懒加载工厂(占位页替换 + 邻接预加载)
- pipeline_executor.py: PipelineExecutor 核心调度(接管 run_full_pipeline/run_single_step/stop_pipeline)
- workspace_initializer.py: WorkspaceInitializer 环境初始化(接管 init_workspace/set_work_directory/auto_populate_all)
|
2026-06-17 17:18:15 +08:00 |
|
|
|
bb5c2a50f8
|
refactor: 引入 EventBus 事件总线,实现各步骤面板间的去中心化自动参数传导,完成最终解耦
|
2026-06-17 16:27:26 +08:00 |
|
|
|
a58744cfbb
|
refactor: 建立动态面板注册表,消除硬编码,实现步骤界面的数据驱动渲染与依赖路由
|
2026-06-17 16:02:17 +08:00 |
|
|
|
1949711cda
|
refactor: 提取 WorkspaceManager,将文件扫描与路径业务逻辑从主 GUI 解耦
|
2026-06-17 15:35:02 +08:00 |
|
|
|
191a4b681d
|
refactor: 移除主界面重复代码,复用现有组件并彻底抽离图像控件
|
2026-06-17 15:16:19 +08:00 |
|
|
|
91881d564a
|
fix: 修复 Step8 模型生成路径错误及特征分离未过滤坐标列导致的 0 模型 Bug
- view 层 Step8View.update_work_directory 不再生成 <work_dir>/indices/<basename>_indices.csv,改为生成标准的 <work_dir>/8_Modeling/ 模型存放目录;FileSelectWidget 标签与文件过滤器同步调整为目录语义(输出模型目录 / All Files (*.*)),消除'保存目录被存成 csv 文件'导致的 train_models 跳过判定。
|
2026-06-17 14:15:34 +08:00 |
|
|
|
c2740c2bde
|
fix(step7): 修复 Step7 未默认加载内置水质指数公式表的问题
- init_ui 末尾自动调用 _auto_load_formulas 读取 src/gui/model/waterindex.csv
并填充 formula_list(默认全选),用户进 tab 即可见/可勾选公式。
- 新增 _resolve_formula_csv_path helper:兼容 PyInstaller _MEIPASS /
frozen _internal / 开发环境(__file__ 倒推 3 层到 src/)三种位置。
- get_config 新增 formula_csv_file 字段——之前缺失导致 step7_service
拿到空路径必报 "未提供公式 CSV 路径(formula_csv_file)" 错误,
进而导致下游 step8/9 因为拿不到 features 而生成 0 个模型。
- 新增 4 个 _on_select_* 按钮回调(_auto_load_formulas 后启用);
set_config 同步兼容 formula_csv_file 键。
- 删除未使用的 _resolve_subdir helper(早前从旧 panel 搬过来但新 view 未引用)。
验证:
AST 解析 320 行 OK
helper 解析到 D:\...\src\gui\model\waterindex.csv exists=True
pandas 解析 CSV 63 行(45 ratio + 18 concentration)OK
BaseView 契约方法 init_ui/get_config/set_config/update_work_directory/
_on_run_clicked 全部保留
|
2026-06-17 14:06:15 +08:00 |
|
|
|
b3a6855881
|
fix: 补齐 Step6 缺失的水体与耀斑掩膜自动传导链路
MainView._sync_dependencies 此前未推送以下两条链路,导致用户
每次进入 Step 6 都必须手动选水体/耀斑掩膜文件:
1. step1 → step6 (boundary_path)
Step 1 在 NDWI 模式下输出 water_mask_out.dat → 经 boundary_path
推给 Step 6 的 self.water_mask_file。
注意:Step 6 接收键名是 boundary_path(历史遗留别名),不是
water_mask_path。
2. step2 → step6 (glint_mask_path)
Step 2 输出 severe_glint_area.dat → 经 glint_mask_path 推给
Step 6 的 self.glint_mask_file。
同时精简了 _sync_dependencies 的 docstring(去掉逐条推送关系列表,
改为一行摘要)和若干块内注释。
其它方法 / 字段 / 类结构未改动。
|
2026-06-17 13:41:50 +08:00 |
|
|
|
6a962f5e8f
|
feat(new-arch):主窗口全功能增强(图标系统 + 全链路参数同步 + 服务输出统一解析 + Step12 分类浏览)
1. main_view.py:图标系统 + 全链路参数自动传导
- 新增 _res() 解析项目根的相对路径,PyInstaller 打包后兼容 sys._MEIPASS。
- 新增 QListWidgetItem / QMessageBox 导入,左侧导航列表支持右键菜单 + 错误弹窗。
- ROUTES 12 条全部新增 icon 字段("1.png" 等),侧边栏显示业务图标。
- 新增 step_outputs 缓存机制:每个 step 完成后把 output_path 写入 self.step_outputs。
- 新增 _sync_dependencies() 同步函数 + _safe_set_config() 包装器,
按依赖图把上游产物推给下游 view:
step1 → step6 water_mask_path
step3 → step4 / step6 / step10 deglint_img_path / bsq_path
step4 → step9 sampling_csv_path
step5 → step6 csv_path
step6 → step7 / step8 training_csv_path
step8 → step9 models_dir(父目录)
step9 → step11 prediction_csv_dir / prediction_csv_path(双推)
step10 → step11 geotiff_dir / geotiff_path(双推)
2. services/step1-13:统一输出解析器集成
- 新增 src/new/services/_output_resolver.py,提供 resolve_output_dir /
copy_to_user_path / get_user_output_path / is_user_specified 四个共享工具。
- 每个 service 把原有的私有 _resolve_xxx_dir 改为调用 resolve_output_dir,
强制执行"用户优先"规则(用户指定 output_path 时用其父目录,否则用 work_dir/<subdir>)。
- 用户指定文件名 vs 底层硬编码文件名的"事后劫持"通过 copy_to_user_path 完成
(覆盖 step2、step4、step7、step8 等底层 step 不接受 output_path 关键字的步骤)。
3. views/step12_view.py:恢复 ImageCategoryTree + ImageViewerWidget 高级组件
- 删掉精简版占位 Label,挂回旧版的 ImageCategoryTree(按"模型评估/光谱分析/
统计图表/处理结果/含量分布图"五类自动归类工作目录下的图像文件)。
- 挂回 ImageViewerWidget(滚轮缩放 0.1x-5x + 50ms 防抖 + FastTransformation/
SmoothTransformation 智能切换 + Ctrl+Wheel + 工具栏)。
- 扫描按钮接通 image_tree.scan_directory(),选中节点即时加载到 image_viewer。
- 按钮样式切换为 ModernStylesheet(success/primary)统一视觉。
|
2026-06-17 13:28:58 +08:00 |
|
|
|
9cb3c8ed0d
|
fix(ui):修复 3 项 UI 交互痛点(输出路径不显示 / Step4 预览缺失 / Step5 CSV NaN 报错)
1. base_view.py:update_from_config 路由修复
原默认实现只缓存 work_dir + pipeline,不触发 update_work_directory,
导致所有派生 view 的输出路径自动填入从未执行。
补一行 self.update_work_directory(work_dir) 后,13 个 view 全部受益。
2. step4_view.py:恢复采样点交互式预览
从旧 panel 移植 preview_btn 按钮 + QTimer 2s 心跳(_check_csv_exists)
+ SamplingViewerDialog 弹窗。
用户在执行 Step 4 后点击按钮即可点击散点查看各采样点光谱曲线。
3. step5_view.py:CSV 预览 NaN 崩溃修复
pd.read_csv(csv_path, nrows=n) → pd.read_csv(csv_path, nrows=n).fillna("")。
避免底层 Qt 模型在解析 float64 空值时崩溃(PandasTableModel 路径必填)。
|
2026-06-17 13:28:10 +08:00 |
|
|
|
48668c9e74
|
services/step10-13:终极决战!打通空间插值、可视化出图与报告生成的最后四步独立服务
|
2026-06-17 09:57:13 +08:00 |
|
|
|
6fc0394fe2
|
services/step6-9:打通光谱计算与机器学习预测的核心独立服务
|
2026-06-17 09:34:21 +08:00 |
|
|
|
f8d5ea2eb8
|
services/step2-5:打通前四个预处理步骤的真实后端独立服务
新增 src/new/services/{step2,step3,step4,step5}_service.py 四个独立后端服务:
|
2026-06-17 09:15:22 +08:00 |
|
|
|
ef3de632d3
|
smoke:L3 step2 断言从 PlaceholderView 更新为 Step2View(反映 12 个 view 已迁移)
|
2026-06-17 08:58:29 +08:00 |
|
|
|
3d4462f4e9
|
main_view:ROUTES 12 条全部对齐真实 view(业务名+路径+class),Boot 日志更新
|
2026-06-17 08:58:24 +08:00 |
|
|
|
84f0f6058f
|
views/step2-view13:12 个前端 view 迁移完成(继承 BaseView,纯 UI,service 仍占位)
|
2026-06-17 08:58:17 +08:00 |
|
|
|
61bd8582e5
|
路由壳升级:TaskWorker 三信号 + main_router→main_view 迁移(54/54 smoke 通过)
|
2026-06-16 18:23:38 +08:00 |
|
|
|
bd4263d2ca
|
旧 GUI 张冠李戴修复:step6/step8 ML 训练 CSV 强制读 Step 6 特征结果 + step3 默认算法切到 goodman
|
2026-06-16 17:53:55 +08:00 |
|
|
|
afe9eaff2c
|
README_new_arch.md + _smoke_new_arch.py:端到端新架构运行文档与三层冒烟(service/view/e2e 共 54 项断言)
|
2026-06-16 17:53:46 +08:00 |
|
|
|
e993a184bd
|
views/* + main_router.py:13 step 路由壳(QListWidget+QStackedWidget+TaskWorker 后台执行器)
|
2026-06-16 17:53:35 +08:00 |
|
|
|
2a89fdc62c
|
services/placeholder_service.py:step2-step13 占位服务(execute_placeholder 返回 not_implemented 状态)
|
2026-06-16 17:53:19 +08:00 |
|
|
|
e62f53bf77
|
services/step1_service.py:水域掩膜纯函数服务(execute_step1,零 PyQt/零全局,异常统一转 dict)
|
2026-06-16 17:53:11 +08:00 |
|
|
|
1e0e7d1973
|
端到端新架构骨架:src/new 包入口 + BaseView 接口契约(dispatch_execute 沿父链上溯 run_single_step)
|
2026-06-16 17:53:01 +08:00 |
|
|
|
15547bddfb
|
.gitignore 精确放行 src/new/(保留 new/ 广义规则的反向例外)
|
2026-06-16 17:52:51 +08:00 |
|
|
|
027981e9a6
|
ContentMapper 边界读取支持栅格水掩膜(.dat/.bsq/.tif/.tiff/.img)
|
2026-06-16 15:15:10 +08:00 |
|
|
|
5084f7d049
|
Step10 Kriging 输出路径强制 14_visualization + Step11 掩膜自动填入
|
2026-06-16 14:12:10 +08:00 |
|
|
|
0238aa66ab
|
路径归一化:统一 14 个子目录 helper 接口 + 修复 getattr 张冠李戴
新增 _step_path_resolver.py(STEP_DATA_SOURCE 映射表 + _FALLBACK_DIR_TABLE 40+ keys + resolve_subdir / get_step_output_path / resolve_step_widget 三层 API),与 pipeline.get_step_output_dir 互为表里、互不依赖。
pipeline 新增 get_step_output_dir(step_name) 唯一权威接口(class-level _STEP_OUTPUT_DIR_MAP 延迟构造 + 未知 key 回退 work_dir + 调试日志)。
全量重构 src/gui/panels/step*.py(17 个文件)
* 消除全部 os.path.join(wp, "X_subdir") 硬编码(14 个预定义子目录)
* 8 处 getattr(main_window.stepXX_panel, ...) 张冠李戴死代码全部修复(错位属性名 → 通过 STEP_DATA_SOURCE 映射到正确的 main_window 长名属性)
* 删除 step12_viz_panel.py 中 self.step11_ml_panel / step11_panel / step12_panel 死代码块
* 提示文字/标签字典/日志保留原文,仅替换实际路径计算
Smoke test:39 fallback key + 14 路径映射 + 14 step 数字 key + 17/17 panel AST 解析 + 17/17 import 全部就位。
|
2026-06-16 12:54:18 +08:00 |
|
|
|
03c788a16c
|
Step6 波长读取:spectral 解析失败时增加 .hdr 文本暴力解析兜底,消灭 band_1 fallback
|
2026-06-16 11:07:30 +08:00 |
|
|
|
d41262aa18
|
Step5 输出文件名统一为 processed_data.csv(修复 GUI/算法断链)
实际落盘(data_preparation_step.py:32、runner.py:101)一直为 processed_data.csv,但 GUI 三处残留旧名 cleaned_sampling_data.csv:注册表 step_default_outputs['step5_clean']、面板占位符、默认输出路径生成。本次统一替换,与 PipelineRunner/算法真实产物对齐。
|
2026-06-15 17:32:07 +08:00 |
|
|
|
0a0ede2e02
|
Step3 插值:多进程内存雪崩二次补丁(mask copy + workers 上限 6)
|
2026-06-15 17:10:36 +08:00 |
|
|
|
60a9d7d922
|
Step3 插值算法 OOM 修复 + 多进程加速 + 全链路累积改动(14 文件)
|
2026-06-15 16:49:17 +08:00 |
|
|
|
82e0b92af6
|
Mega-1.1 全链路路径归一化收尾(18 文件)
|
2026-06-15 15:20:50 +08:00 |
|
|
|
a9e77d2ad0
|
添加公式方法
|
2026-06-15 14:55:32 +08:00 |
|
|
|
f73a7d8999
|
添加公式方法
|
2026-06-12 16:48:20 +08:00 |
|
|
|
be47b70594
|
Step4 心跳刷新 + Step10 输出目录更名与智能寻址优化
|
2026-06-12 10:27:47 +08:00 |
|
|
|
4c9ca2aa03
|
全链路路径对齐:注册表重写为字符串格式,10_sampling→4_sampling,water_quality_indices→training_spectra_indices
|
2026-06-12 09:59:35 +08:00 |
|
|
|
89bdcbc27a
|
Step7 面板:移除输出模式选择 UI,output_mode 硬编码锁定为 0(全量输出)
|
2026-06-12 09:27:16 +08:00 |
|
|
|
04669bdee8
|
Step7 面板:单选框蓝底实心样式美化,清理死代码(np/Tuple 导入、_get_coord_cols),run_step 路由化
|
2026-06-12 09:24:16 +08:00 |
|
|
|
e59703f163
|
结构修改,后端文件跟前端内容进行适配
|
2026-06-11 17:44:24 +08:00 |
|
|
|
3584c07b67
|
对齐 GUI 面板 ID 与 pipeline 方法路由
|
2026-06-11 15:35:47 +08:00 |
|
|
|
1ad4c54b80
|
Fix step4_panel variable name inconsistency causing AttributeError
|
2026-06-11 15:14:26 +08:00 |
|
|
|
5d75d3371b
|
Step5: 强制锁死GUI路由字典,替换全部旧step_id为新命名
|
2026-06-11 15:09:35 +08:00 |
|
|
|
d3262ae80d
|
Rename pipeline method names to match step numbers (Step4)
|
2026-06-11 14:58:39 +08:00 |
|
|
|
7c7a31ce00
|
Fix panel internal titles and step calls (Step3)
|
2026-06-11 14:56:33 +08:00 |
|
|
|
604886abb3
|
fix(gui): 同步侧边栏/选项卡文本与路由映射,删除回归预测 tab
|
2026-06-11 11:24:28 +08:00 |
|
|
|
3c4d4081a4
|
refactor(gui): 重命名面板序号 step4-11,采样点布设移至 step4,ML 建模移至 step9
|
2026-06-11 11:13:16 +08:00 |
|