可视化面板重构:目录/文件名双引擎汉化,Emoji图标智能分配

This commit is contained in:
DXC
2026-05-08 14:43:32 +08:00
parent f24aa4f555
commit 7cadd7e437

View File

@ -548,22 +548,24 @@ class ImageCategoryTree(QTreeWidget):
# 目录层级中文翻译 # 目录层级中文翻译
DIR_MAPPING = { DIR_MAPPING = {
"14_visualization": "可视化产物", "14_visualization": "统计与分析报表",
"glint_deglint_previews": "耀斑与去耀斑预览", "1_water_mask": "水域掩膜识别",
"sampling_maps": "采样点地图", "2_glint": "耀斑区域检测",
"scatter_plots": "模型评估散点图", "3_deglint": "去耀斑影像结果",
"flight_maps": "飞行轨迹图", "5_training_spectra": "训练光谱特征",
"11_12_13_predictions": "预测结果", "8_Regression_Modeling": "回归建模分析",
"9_water_quality_prediction": "水质预测结果",
"10_feature_construction": "特征构建散点",
"11_12_13_predictions": "空间分布专题图",
"glint_deglint_previews": "耀斑处理预览",
"sampling_maps": "采样点空间分布",
"flight_maps": "无人机飞行轨迹",
"Machine_Learning_Prediction": "机器学习预测", "Machine_Learning_Prediction": "机器学习预测",
"Non_Empirical_Prediction": "非经验模型预测", "Non_Empirical_Prediction": "非经验模型预测",
"Custom_Regression_Prediction": "自定义回归预测", "Custom_Regression_Prediction": "自定义回归预测",
"8_Regression_Modeling": "回归建模", "boxplot_dir": "水质参数箱线图",
"10_feature_construction": "特征构建", "boxplot": "水质参数箱线图",
"5_training_spectra": "训练光谱", "output_dir": "输出目录",
"2_glint": "耀斑分析",
"3_deglint": "去耀斑处理",
"1_water_mask": "水掩膜",
"9_water_quality_prediction": "水质预测",
"8_spatial_inversion": "空间反演", "8_spatial_inversion": "空间反演",
"4_processed_data": "处理数据", "4_processed_data": "处理数据",
} }
@ -610,59 +612,49 @@ class ImageCategoryTree(QTreeWidget):
return self.DIR_MAPPING.get(dir_name, dir_name) return self.DIR_MAPPING.get(dir_name, dir_name)
def _translate_filename(self, filename: str) -> str: def _translate_filename(self, filename: str) -> str:
"""翻译文件名为中文(动态替换后缀片段)""" # 1. 后缀替换 (图表类型)
# 依次替换常见后缀模式 type_mapping = {
replacements = [ '_scatter_true_vs_pred': ' 真值预测散点图',
("_spectrum_comparison", " 光谱曲线对比图"), '_spectrum_comparison': ' 光谱曲线对比图',
("_scatter_true_vs_pred", " 真值-预测散点图"), '_spectrum': ' 光谱特征图',
("_true_vs_pred", " 真值-预测散点图"), '_histogram': ' 分布直方图',
("_histogram", " 分布直方图"), '_boxplot_seaborn': ' Seaborn箱线图',
("_boxplot", " 箱线图"), '_boxplot': ' 箱线图',
("_distribution_map", " 分布图"), '_distribution_enhanced': ' 增强空间分布图',
("_distribution_enhanced", " 增强分布图"), '_distribution': ' 空间分布图',
("_thematic_map", " 专题图"), '_sampling_map': ' 采样点地图',
("_water_quality_map", " 水质分布图"), '_flight_paths': ' 飞行轨迹图',
("_prediction_map", " 预测结果图"), '_preview': ' 效果预览图',
("_inversion_map", " 反演结果图"), 'water_mask_overlay': '水域掩膜叠加图',
("_glint_deglint", " 耀斑去耀斑对比"), 'hsi_preview': '原始影像预览',
("_glint_mask", " 耀斑掩膜"), 'correlation_heatmap': '特征相关性热力图',
("_deglint", " 去耀斑"), 'parameter_boxplot': '水质参数汇总箱线图',
("_mask_overlay", " 掩膜叠加"), 'all_parameters_boxplot': '全参数汇总箱线图',
("_content", " 含量"), 'content_map': '含量分布专题图',
("_distribution", " 分布"), '_scatter_with_confidence': ' 置信区间散点图'
("_prediction", " 预测"),
("_inversion", " 反演"),
("_enhanced", " 增强"),
("_scatter", " 散点图"),
("_boxplot", " 箱线图"),
("_correlation_heatmap", " 相关性热力图"),
("_parameter_boxplot", " 箱线图"),
("_sampling_point", " 采样点"),
("_sampling_points", " 采样点"),
("_flight_path", " 飞行轨迹"),
("_trajectory", " 轨迹"),
]
result = filename
for pattern, replacement in replacements:
result = result.replace(pattern, replacement)
# 处理参数名(常见水质参数翻译)
param_map = {
"Chla": "叶绿素", "COD": "化学需氧量", "TN": "总氮", "TP": "总磷",
"Turbidity": "浊度", "DO": "溶解氧", "pH": "pH值",
"Conductivity": "电导率", "BOD": "生化需氧量", "NH3_N": "氨氮",
} }
for eng, chn in param_map.items():
# 在文件名中找到参数名并翻译
if eng.lower() in result.lower():
result = result.replace(eng, chn)
if eng.lower() in result.lower():
result = result.replace(eng.lower(), chn)
# 如果没有任何替换,返回原文件名(去掉扩展名) name = filename
if result == filename: for eng, chn in type_mapping.items():
return filename.rsplit(".", 1)[0] if "." in filename else filename if eng in name:
return result name = name.replace(eng, chn)
# 2. 常见水质参数前缀替换
param_mapping = {
'Chlorophyll': '叶绿素', 'Chl_a': '叶绿素a', 'Chla': '叶绿素a',
'Turbidity': '浊度', 'Temperature': '温度', 'spCond': '电导率',
'COD': '化学需氧量', 'DO': '溶解氧', 'PH': 'pH值', 'TDS': '总溶解固体',
'BGA': '蓝绿藻', 'TT': '透明度', 'NH3-N': '氨氮', 'NO3-N': '硝酸盐氮',
'severe_glint_area': '重度耀斑区域', 'deglint_goodman': 'Goodman算法去耀斑'
}
for eng, chn in param_mapping.items():
if name.startswith(eng + ' ') or name.startswith(eng + '_'):
name = name.replace(eng, chn, 1)
elif eng in name:
name = name.replace(eng, chn)
return name.strip('_')
def add_image_by_dir(self, file_path: Path, work_path: Path): def add_image_by_dir(self, file_path: Path, work_path: Path):
"""按真实物理目录层级挂载图片节点 """按真实物理目录层级挂载图片节点
@ -713,10 +705,19 @@ class ImageCategoryTree(QTreeWidget):
else: else:
parent_item = root_item parent_item = root_item
# 创建图片节点 # 创建图片节点(根据翻译后的名称分配图标)
display_name = self._translate_filename(file_path.stem) + file_path.suffix display_name = self._translate_filename(file_path.stem) + file_path.suffix
icon = "🖼️" # 默认
if "散点" in display_name:
icon = "📊"
elif "光谱" in display_name or "曲线" in display_name:
icon = "📈"
elif "箱线" in display_name or "直方" in display_name:
icon = "📉"
elif "分布" in display_name or "地图" in display_name or "轨迹" in display_name:
icon = "🗺️"
image_item = QTreeWidgetItem(parent_item) image_item = QTreeWidgetItem(parent_item)
image_item.setText(0, f" 🖼 {display_name}") image_item.setText(0, f" {icon} {display_name}")
image_item.setData(0, Qt.UserRole, {"type": "image", "path": str(file_path), "display_name": display_name}) image_item.setData(0, Qt.UserRole, {"type": "image", "path": str(file_path), "display_name": display_name})
image_item.setToolTip(0, str(file_path)) image_item.setToolTip(0, str(file_path))