整体框架修改

This commit is contained in:
DXC
2026-06-26 09:45:11 +08:00
parent bcd1ce371e
commit ea5d80041d

View File

@ -258,10 +258,15 @@ class WaterQualityGUI(QMainWindow):
banner_layout.addWidget(self._banner_label)
self._banner_title_label = QLabel("MegaCube-Water Quality V1.2", self._banner_label)
# 现代化字体设计:去掉老旧的衬线体,换用带字间距的粗体无衬线字体,增加高级感
self._banner_title_label.setStyleSheet("""
QLabel {
background: transparent; color: white; font-size: 48px;
font-family: "Times New Roman", "Georgia", serif;
background: transparent;
color: #FFFFFF;
font-size: 42px;
font-weight: bold;
font-family: "Microsoft YaHei UI", "Segoe UI", sans-serif;
letter-spacing: 3px;
}
""")
self._banner_title_label.setAttribute(Qt.WA_TransparentForMouseEvents)
@ -299,16 +304,21 @@ class WaterQualityGUI(QMainWindow):
# 上一步 / 下一步 导航按钮
nav_btn_layout = QHBoxLayout()
nav_btn_layout.setSpacing(10)
self._prev_btn = QPushButton("< 上一步")
self._prev_btn.setMinimumHeight(32)
self._prev_btn.setStyleSheet(ModernStylesheet.get_button_stylesheet('default'))
nav_btn_layout.setSpacing(12)
self._prev_btn = QPushButton(" 上一步 ")
self._prev_btn.setMinimumHeight(36)
self._prev_btn.setMinimumWidth(100)
# 上一步是次要操作,用 normal 样式
self._prev_btn.setStyleSheet(ModernStylesheet.get_button_stylesheet('normal'))
self._prev_btn.clicked.connect(self._on_prev_clicked)
nav_btn_layout.addWidget(self._prev_btn)
self._next_btn = QPushButton("下一步 >")
self._next_btn.setMinimumHeight(32)
self._next_btn.setStyleSheet(ModernStylesheet.get_button_stylesheet('default'))
self._next_btn = QPushButton(" 下一步 ")
self._next_btn.setMinimumHeight(36)
self._next_btn.setMinimumWidth(100)
# 下一步是主要操作,用 primary (主题蓝) 样式
self._next_btn.setStyleSheet(ModernStylesheet.get_button_stylesheet('primary'))
self._next_btn.clicked.connect(self._on_next_clicked)
nav_btn_layout.addWidget(self._next_btn)
@ -329,68 +339,84 @@ class WaterQualityGUI(QMainWindow):
nav_widget = QWidget()
nav_layout = QVBoxLayout()
nav_layout.setContentsMargins(10, 15, 10, 15)
nav_layout.setContentsMargins(0, 15, 0, 15) # 去掉左右边距,让列表通栏
nav_layout.setSpacing(10)
title = QLabel("流程步骤")
title.setFont(QFont("Arial", 13, QFont.Bold))
title = QLabel("流程导航")
title.setFont(QFont("Microsoft YaHei", 14, QFont.Bold))
title.setAlignment(Qt.AlignCenter)
title.setStyleSheet(f"color: {ModernStylesheet.COLORS['text_primary']}; padding: 10px;")
title.setStyleSheet(f"color: {ModernStylesheet.COLORS['primary']}; padding: 10px;")
nav_layout.addWidget(title)
self._step_list = QListWidget()
self._step_list.setStyleSheet(ModernStylesheet.get_sidebar_stylesheet())
# 注入纯净的现代侧边栏 QSS
self._step_list.setStyleSheet(f"""
QListWidget {{
background-color: {ModernStylesheet.COLORS['panel_bg']};
border: none;
outline: 0; /* 去掉点击时的虚线框 */
}}
QListWidget::item {{
padding: 12px 16px;
border-left: 4px solid transparent;
color: {ModernStylesheet.COLORS['text_primary']};
}}
QListWidget::item:hover {{
background-color: {ModernStylesheet.COLORS['hover']};
}}
QListWidget::item:selected {{
background-color: {ModernStylesheet.COLORS['selected']};
color: {ModernStylesheet.COLORS['primary']};
font-weight: bold;
border-left: 4px solid {ModernStylesheet.COLORS['primary']};
}}
""")
process_stages = build_stage_groups()
stage_names = list(process_stages.keys())
for stage_idx, (stage_name, steps) in enumerate(process_stages.items()):
# 分类头
stage_item = QListWidgetItem(stage_name)
stage_font = QFont("Arial", 11, QFont.Bold)
stage_font.setBold(True)
stage_font = QFont("Microsoft YaHei", 11, QFont.Bold)
stage_item.setFont(stage_font)
stage_item.setForeground(QColor("#0078D4"))
stage_item.setFlags(stage_item.flags() & ~Qt.ItemIsSelectable)
stage_item.setFlags(stage_item.flags() & ~Qt.ItemIsEnabled)
stage_item.setForeground(QColor(ModernStylesheet.COLORS['primary']))
stage_item.setBackground(QColor(ModernStylesheet.COLORS['main_bg'])) # 给头加个浅灰底色区隔
stage_item.setFlags(stage_item.flags() & ~Qt.ItemIsSelectable & ~Qt.ItemIsEnabled)
stage_item.setData(Qt.UserRole, "stage_header")
self._step_list.addItem(stage_item)
# 具体步骤
for step_id, step_display in steps:
item = QListWidgetItem(f" {step_display}")
item = QListWidgetItem(f" {step_display}") # 增加缩进
item.setData(Qt.UserRole, step_id)
step_font = QFont("Arial", 10)
item.setFont(step_font)
item.setForeground(QColor(ModernStylesheet.COLORS.get('text_secondary', '#666666')))
item.setFont(QFont("Microsoft YaHei", 10))
self._step_list.addItem(item)
# 分隔符 (不需要实体占用高度,缩小即可)
if stage_idx < len(stage_names) - 1:
sep = QListWidgetItem("")
sep.setFlags(sep.flags() & ~Qt.ItemIsSelectable)
sep.setFlags(sep.flags() & ~Qt.ItemIsEnabled)
sep.setSizeHint(sep.sizeHint().expandedTo(Qt.QSize(0, 5)))
sep.setFlags(sep.flags() & ~Qt.ItemIsSelectable & ~Qt.ItemIsEnabled)
self._step_list.addItem(sep)
self._step_list.currentRowChanged.connect(self._on_step_list_changed)
nav_layout.addWidget(self._step_list)
# 底部按钮区 (仅保留强制停止)
btn_layout = QVBoxLayout()
btn_layout.setSpacing(8)
self._run_all_btn = QPushButton("> 运行完整流程")
self._run_all_btn.setStyleSheet(ModernStylesheet.get_button_stylesheet('success'))
self._run_all_btn.setMinimumHeight(35)
self._run_all_btn.clicked.connect(self._on_run_all_clicked)
btn_layout.addWidget(self._run_all_btn)
self._stop_btn = QPushButton("⏹ 停止")
btn_layout.setContentsMargins(15, 0, 15, 0)
self._stop_btn = QPushButton("⏹ 强制停止当前任务")
self._stop_btn.setEnabled(False)
self._stop_btn.setMinimumHeight(35)
self._stop_btn.setMinimumHeight(38)
self._stop_btn.setStyleSheet(ModernStylesheet.get_button_stylesheet('danger'))
self._stop_btn.clicked.connect(self._pipeline_executor.stop_pipeline)
btn_layout.addWidget(self._stop_btn)
nav_layout.addLayout(btn_layout)
nav_widget.setLayout(nav_layout)
nav_widget.setMaximumWidth(280)
nav_widget.setMaximumWidth(260)
nav_widget.setStyleSheet(
f"background-color: {ModernStylesheet.COLORS['panel_bg']};"
f"border-right: 1px solid {ModernStylesheet.COLORS['border_light']};"
@ -409,12 +435,10 @@ class WaterQualityGUI(QMainWindow):
self._event_bus.subscribe('WorkspaceChanged', self._on_workspace_changed)
def _on_pipeline_started(self, data):
self._run_all_btn.setEnabled(False)
self._stop_btn.setEnabled(True)
self._log_manager.progress_bar.setValue(0)
def _on_pipeline_finished(self, data):
self._run_all_btn.setEnabled(True)
self._stop_btn.setEnabled(False)
success = data.get('success', False)
message = data.get('message', '')
@ -425,7 +449,6 @@ class WaterQualityGUI(QMainWindow):
QMessageBox.critical(self, "失败", f"流程执行失败:\n\n{message[:200]}")
def _on_pipeline_stopped(self, data):
self._run_all_btn.setEnabled(True)
self._stop_btn.setEnabled(False)
def _on_navigate_to_tab(self, data):
@ -446,14 +469,6 @@ class WaterQualityGUI(QMainWindow):
except Exception:
pass
def _on_run_all_clicked(self):
print("==== 按钮确实被按下了 ====", flush=True)
try:
self._pipeline_executor.run_full_pipeline()
except Exception as e:
print(f"执行器调用崩溃: {e}")
traceback.print_exc()
# ================================================================
# 导航 → Tab 单向路由(左侧 List 驱动右侧 TabTab 头部已隐藏)
# ================================================================