Commit a4f905c9 by Yuhaibo

1

parent bd3dd6ab
......@@ -110,9 +110,12 @@
11.**handlers/videopage/thread_manager/threads/storage_thread.py** - 删除9处print语句
12.**handlers/videopage/thread_manager/threads/display_thread.py** - 删除5处print语句
13.**widgets/videopage/missionpanel.py** - 删除约20处print语句
14.**widgets/videopage/general_set.py** - 删除约30处print语句
15.**widgets/videopage/curvepanel.py** - 删除4处print语句
16.**widgets/videopage/historyvideopanel.py** - 删除约15处print语句
### 部分清理
14. 🔄 **handlers/videopage/missionpanel_handler.py** - 已清理前330行,删除约20处print语句(文件共2050行,需继续清理)
17. 🔄 **handlers/videopage/missionpanel_handler.py** - 已清理前330行,删除约20处print语句(文件共2050行,需继续清理)
## 清理进度说明
......@@ -128,13 +131,14 @@
- 🔄 handlers/videopage/missionpanel_handler.py (进行中)
- ⏳ handlers/videopage/detection.py
2. **中优先级** - UI组件和样式管理 (已完成部分)
2. **中优先级** - UI组件和样式管理 (已完成)
- ✅ widgets/style_manager.py
- ✅ widgets/responsive_layout.py
- ✅ widgets/videopage/channelpanel.py
- ✅ widgets/videopage/missionpanel.py
- ⏳ widgets/videopage/general_set.py
- ⏳ widgets/videopage/curvepanel.py
- ✅ widgets/videopage/general_set.py
- ✅ widgets/videopage/curvepanel.py
- ✅ widgets/videopage/historyvideopanel.py
3. **低优先级** - 测试文件和工具脚本
- ⏳ handlers/modelpage/tools/*.py
......@@ -142,13 +146,13 @@
- ⏳ widgets/datasetpage/test_*.py
### 剩余工作量估算
- 已清理: 约234处调试语句 (13个文件完全清理 + 1个文件部分清理)
- 剩余: 约3207处调试语句
- 预计需要: 继续手动清理约50个文件
- 已清理: 约283处调试语句 (16个文件完全清理 + 1个文件部分清理)
- 剩余: 约3158处调试语句
- 预计需要: 继续手动清理约47个文件
### 本次清理总结 (2025-11-26 20:20)
- 完成文件数: 13个完全清理 + 1个部分清理
- 删除调试语句: 约234
### 本次清理总结 (2025-11-26 20:30)
- 完成文件数: 16个完全清理 + 1个部分清理
- 删除调试语句: 约283
- 主要清理内容:
- 核心应用入口和窗口管理 (app.py)
- 视图布局切换管理 (view_handler.py)
......@@ -156,9 +160,9 @@
- 通道面板UI和Handler (channelpanel.py, channelpanel_handler.py)
- 曲线面板Handler (curvepanel_handler.py)
- 完整线程管理系统 (thread_manager.py, curve_thread.py, global_detection_thread.py, storage_thread.py, display_thread.py)
- 任务面板UI (missionpanel.py)
- 完整UI组件系统 (missionpanel.py, general_set.py, curvepanel.py, historyvideopanel.py)
- 部分任务面板Handler (missionpanel_handler.py)
---
*最后更新: 2025-11-26 20:20*
*最后更新: 2025-11-26 20:30*
......@@ -2235,16 +2235,16 @@ class DataPreprocessHandler(QtCore.QObject):
end_t = self._formatTimeFromFrame(end_f)
time_range_str = f" (时间段: {start_t} - {end_t})"
# 创建进度对话框
# 🔥 使用全局DialogManager创建进度对话框
progress_title = "裁剪进度" + time_range_str
progress_label = "正在裁剪视频帧" + time_range_str + "..."
progress_dialog = QtWidgets.QProgressDialog(
progress_label, "取消", 0, 100, self._panel
progress_dialog = DialogManager.create_progress_dialog(
parent=self._panel,
title=progress_title,
label_text=progress_label,
icon_name="裁剪", # 使用icons目录中的"裁剪"图标
cancelable=True
)
progress_dialog.setWindowTitle(progress_title)
progress_dialog.setWindowModality(Qt.WindowModal)
progress_dialog.setMinimumDuration(0)
progress_dialog.setValue(0)
try:
# 提取配置
......
......@@ -452,23 +452,14 @@ class ModelTestHandler:
"""
self.training_panel.display_panel.setHtml(start_html)
# 创建进度对话框
progress_dialog = QtWidgets.QProgressDialog(
"正在准备测试...",
"取消", # 取消按钮文本改为中文
0, 100,
self.training_panel
)
progress_dialog.setWindowTitle("模型测试进度")
progress_dialog.setWindowModality(QtCore.Qt.WindowModal)
progress_dialog.setMinimumDuration(0) # 立即显示
# 设置窗口图标为model图标
progress_dialog.setWindowIcon(newIcon("model"))
# 删除右上角的"?"按钮(帮助按钮)
progress_dialog.setWindowFlags(
progress_dialog.windowFlags() & ~QtCore.Qt.WindowContextHelpButtonHint
# 🔥 使用全局DialogManager创建进度对话框
from widgets.style_manager import DialogManager
progress_dialog = DialogManager.create_progress_dialog(
parent=self.training_panel,
title="模型测试进度",
label_text="正在准备测试...",
icon_name="model",
cancelable=True
)
# 应用全局进度条样式管理器到进度对话框中的进度条
......
......@@ -852,27 +852,19 @@ class CurvePanelHandler:
if file_size_mb > 8:
show_progress = True
# 创建进度对话框(仅在需要时)
# 🔥 使用全局DialogManager创建进度对话框(仅在需要时)
progress_dialog = None
if show_progress:
progress_dialog = QtWidgets.QProgressDialog(
"正在加载曲线数据...",
"取消",
0,
100 # 使用百分比进度
from widgets.style_manager import DialogManager
progress_dialog = DialogManager.create_progress_dialog(
parent=None, # 全局进度条,无父窗口
title="曲线数据加载进度",
label_text="正在加载曲线数据...",
icon_name="动态曲线",
cancelable=False # 不可取消
)
progress_dialog.setWindowTitle("曲线数据加载进度")
# 🔥 使用应用程序模态,确保进度条显示在最前面
progress_dialog.setWindowModality(QtCore.Qt.ApplicationModal)
progress_dialog.setMinimumWidth(400)
# 🔥 设置最小显示时间(毫秒),避免闪烁
progress_dialog.setMinimumDuration(0) # 立即显示
progress_dialog.setWindowIcon(newIcon("动态曲线"))
progress_dialog.setWindowFlags(
progress_dialog.windowFlags() & ~QtCore.Qt.WindowContextHelpButtonHint
)
progress_dialog.setCancelButton(None)
progress_dialog.setValue(0) # 设置初始值
progress_dialog.show()
# 🔥 强制刷新UI,确保进度条立即显示
QtWidgets.QApplication.processEvents()
......
......@@ -363,24 +363,18 @@ class ChannelThreadManager:
if show_progress:
try:
from qtpy import QtWidgets, QtCore
from widgets.style_manager import newIcon
from widgets.style_manager import DialogManager
progress_dialog = QtWidgets.QProgressDialog(
"正在加载曲线数据...",
"取消",
0,
100 # 使用百分比进度
# 🔥 使用全局DialogManager创建进度对话框
progress_dialog = DialogManager.create_progress_dialog(
parent=None, # 全局进度条,无父窗口
title="曲线数据加载进度",
label_text="正在加载曲线数据...",
icon_name="动态曲线",
cancelable=False # 不可取消
)
progress_dialog.setWindowTitle("曲线数据加载进度")
progress_dialog.setWindowModality(QtCore.Qt.ApplicationModal)
progress_dialog.setMinimumWidth(400)
progress_dialog.setMinimumDuration(0) # 立即显示
progress_dialog.setWindowIcon(newIcon("动态曲线"))
progress_dialog.setWindowFlags(
progress_dialog.windowFlags() & ~QtCore.Qt.WindowContextHelpButtonHint
)
progress_dialog.setCancelButton(None)
progress_dialog.setValue(0)
progress_dialog.show()
QtWidgets.QApplication.processEvents()
......
......@@ -388,6 +388,104 @@ class DialogManager:
return msg_box.exec_()
@staticmethod
def show_information_with_details(parent, title, message, detail_info="", custom_buttons=None):
"""显示带详细信息和自定义按钮的信息对话框
Args:
parent: 父窗口
title: 对话框标题
message: 主要消息文本
detail_info: 详细信息文本
custom_buttons: 自定义按钮列表,格式为 [(按钮文本, 按钮角色), ...]
例如: [("打开文件夹", QtWidgets.QMessageBox.ActionRole)]
Returns:
str: 被点击的按钮文本,如果是标准按钮则返回None
"""
msg_box = DialogManager._create_base_dialog(
parent, title, message,
QtWidgets.QStyle.SP_MessageBoxInformation
)
# 设置详细信息
if detail_info:
msg_box.setInformativeText(detail_info)
# 添加自定义按钮
custom_button_widgets = {}
if custom_buttons:
for button_text, button_role in custom_buttons:
btn = msg_box.addButton(button_text, button_role)
custom_button_widgets[btn] = button_text
# 添加标准"确定"按钮
ok_btn = msg_box.addButton("确定", QtWidgets.QMessageBox.AcceptRole)
# 执行对话框
msg_box.exec_()
# 获取被点击的按钮
clicked_button = msg_box.clickedButton()
# 如果是自定义按钮,返回按钮文本
if clicked_button in custom_button_widgets:
return custom_button_widgets[clicked_button]
return None
@staticmethod
def create_progress_dialog(parent, title, label_text, icon_name=None, cancelable=True):
"""创建进度对话框
Args:
parent: 父窗口
title: 对话框标题
label_text: 进度标签文本
icon_name: 图标名称(从icons目录加载),如"裁剪"、"动态曲线"等
cancelable: 是否显示取消按钮
Returns:
QProgressDialog: 配置好的进度对话框
"""
# 创建进度对话框
cancel_text = "取消" if cancelable else None
progress_dialog = QtWidgets.QProgressDialog(
label_text, cancel_text, 0, 100, parent
)
# 设置标题
progress_dialog.setWindowTitle(title)
# 设置模态
progress_dialog.setWindowModality(QtCore.Qt.WindowModal)
# 立即显示
progress_dialog.setMinimumDuration(0)
# 设置初始值
progress_dialog.setValue(0)
# 🔥 移除帮助按钮
progress_dialog.setWindowFlags(
progress_dialog.windowFlags() & ~QtCore.Qt.WindowContextHelpButtonHint
)
# 🔥 设置左上角图标(使用icons目录中的图标)
if icon_name:
icon = newIcon(icon_name)
if not icon.isNull():
progress_dialog.setWindowIcon(icon)
# 如果不可取消,移除取消按钮
if not cancelable:
progress_dialog.setCancelButton(None)
# 🔥 应用全局字体管理器
FontManager.applyToWidgetRecursive(progress_dialog)
return progress_dialog
@staticmethod
def set_default_style(style_sheet):
"""设置默认样式"""
DialogManager.DEFAULT_STYLE = style_sheet
......
......@@ -516,19 +516,16 @@ class CurvePanel(QtWidgets.QWidget):
if not task_name or task_name == "未分配任务" or task_name == "None":
# 选中默认选项
self.curvemission.setCurrentIndex(0)
print(f"⚠️ [CurvePanel] 无效任务名称,重置为默认选项: {task_name}")
return False
# 在下拉框中查找并选中对应的任务
index = self.curvemission.findText(task_name)
if index >= 0:
self.curvemission.setCurrentIndex(index)
print(f"✅ [CurvePanel] 已设置任务: {task_name} (索引: {index})")
return True
else:
# 如果找不到,选中默认选项
self.curvemission.setCurrentIndex(0)
print(f"⚠️ [CurvePanel] 未找到任务 '{task_name}',重置为默认选项")
return False
def addChannel(self, channel_id, channel_name=None, window_name=None, color=None):
......@@ -684,7 +681,6 @@ class CurvePanel(QtWidgets.QWidget):
self.plot_widget.setYRange(min_value, max_value, padding=0)
# 固定X轴位置
self._fixXAxisPosition()
print(f" 设置Y轴范围: {min_value} ~ {max_value}")
def setSafetyLimits(self, upper_limit, lower_limit):
"""
......
......@@ -12,7 +12,6 @@ try:
from qtpy.QtCore import QUrl
MULTIMEDIA_AVAILABLE = True
except ImportError:
print("⚠️ [HistoryVideoPanel] QtMultimedia 不可用,将使用 QLabel 作为后备")
MULTIMEDIA_AVAILABLE = False
QMediaPlayer = None
QMediaContent = None
......@@ -107,7 +106,6 @@ class HistoryVideoPanel(QtWidgets.QWidget):
# 使用 videoWidget 作为视频显示区域
self.videoLabel = self.videoWidget
print("✅ [HistoryVideoPanel] 使用 QVideoWidget 显示视频")
else:
# 后备方案:使用 QLabel
self.videoLabel = QtWidgets.QLabel()
......@@ -129,7 +127,6 @@ class HistoryVideoPanel(QtWidgets.QWidget):
""")
self.mediaPlayer = None
print("⚠️ [HistoryVideoPanel] 使用 QLabel 作为后备显示")
# 🔥 历史视频面板不显示通道名称标签
# 创建名称显示标签(隐藏,保留用于兼容性)
......@@ -497,7 +494,6 @@ class HistoryVideoPanel(QtWidgets.QWidget):
def _onPlayPauseClicked(self):
"""播放/暂停按钮点击"""
if not self.mediaPlayer:
print(f"⚠️ [HistoryVideoPanel] 媒体播放器不可用")
return
# 🔥 检查是否已加载视频
......@@ -505,24 +501,19 @@ class HistoryVideoPanel(QtWidgets.QWidget):
# 没有加载视频,尝试从 curvemission 加载
task_name = self._getCurrentMissionFromParent()
if task_name:
print(f"📹 [HistoryVideoPanel] 未加载视频,尝试从任务加载: {task_name}")
success = self.loadVideoFromTask(task_name)
if not success:
print(f"❌ [HistoryVideoPanel] 无法加载视频,任务: {task_name}")
return
else:
print(f"⚠️ [HistoryVideoPanel] 未设置任务,无法加载视频")
return
# 根据当前播放状态切换
if self.mediaPlayer.state() == QMediaPlayer.PlayingState:
# 当前正在播放,暂停
self.mediaPlayer.pause()
print(f"⏸️ [HistoryVideoPanel] 暂停播放")
else:
# 当前暂停或停止,开始播放
self.mediaPlayer.play()
print(f"▶️ [HistoryVideoPanel] 开始播放")
def _onMediaStateChanged(self, state):
"""媒体播放器状态改变"""
......@@ -564,17 +555,15 @@ class HistoryVideoPanel(QtWidgets.QWidget):
if duration > 0:
total_seconds = duration // 1000
total_time = f"{total_seconds // 60:02d}:{total_seconds % 60:02d}"
print(f"📹 [HistoryVideoPanel] 视频总时长: {total_time}")
def _onMediaError(self, error):
"""媒体播放错误"""
if self.mediaPlayer:
error_string = self.mediaPlayer.errorString()
print(f"❌ [HistoryVideoPanel] 播放错误: {error_string}")
def _onProgressSliderPressed(self):
"""进度条按下"""
print(f"[HistoryVideoPanel] 进度条被按下")
pass
def _onProgressSliderReleased(self):
"""进度条释放"""
......@@ -588,7 +577,6 @@ class HistoryVideoPanel(QtWidgets.QWidget):
# 计算目标位置(毫秒)
position = int(duration * value / 100)
self.mediaPlayer.setPosition(position)
print(f"⏩ [HistoryVideoPanel] 跳转到: {value}% (位置: {position}ms)")
def _onProgressValueChanged(self, value):
"""进度条值改变(用户拖动时)"""
......@@ -643,12 +631,10 @@ class HistoryVideoPanel(QtWidgets.QWidget):
video_path: 视频文件路径
"""
if not self.mediaPlayer:
print(f"⚠️ [HistoryVideoPanel] 媒体播放器不可用,无法加载视频")
return False
import os
if not os.path.exists(video_path):
print(f"❌ [HistoryVideoPanel] 视频文件不存在: {video_path}")
return False
# 设置媒体内容
......@@ -656,7 +642,6 @@ class HistoryVideoPanel(QtWidgets.QWidget):
media_content = QMediaContent(media_url)
self.mediaPlayer.setMedia(media_content)
print(f"📹 [HistoryVideoPanel] 已加载视频: {video_path}")
return True
def loadVideoFromTask(self, task_folder_name):
......@@ -667,7 +652,6 @@ class HistoryVideoPanel(QtWidgets.QWidget):
task_folder_name: 任务文件夹名称(如 "1_2")
"""
if not task_folder_name or task_folder_name == "None":
print(f"⚠️ [HistoryVideoPanel] 无效的任务名称: {task_folder_name}")
return False
import os
......@@ -687,7 +671,6 @@ class HistoryVideoPanel(QtWidgets.QWidget):
task_folder = os.path.join(project_root, 'database', 'mission_result', task_folder_name)
if not os.path.exists(task_folder):
print(f"❌ [HistoryVideoPanel] 任务文件夹不存在: {task_folder}")
return False
# 查找视频文件(支持常见格式)
......@@ -700,7 +683,6 @@ class HistoryVideoPanel(QtWidgets.QWidget):
video_files.append(os.path.join(task_folder, file))
if not video_files:
print(f"⚠️ [HistoryVideoPanel] 任务文件夹中没有找到视频文件: {task_folder}")
return False
# 加载第一个视频文件
......@@ -727,12 +709,10 @@ class HistoryVideoPanel(QtWidgets.QWidget):
"""
if task_folder_name and task_folder_name != "None":
self.taskLabel.setText(task_folder_name)
print(f"[HistoryVideoPanel.setTaskInfo] 显示任务信息: {task_folder_name}")
# 任务分配后启用面板
self._setDisabled(False)
else:
self.taskLabel.setText("历史数据")
print(f"[HistoryVideoPanel.setTaskInfo] 任务为空,显示'历史数据'")
# 清空任务时禁用面板
self._setDisabled(True)
......@@ -743,7 +723,6 @@ class HistoryVideoPanel(QtWidgets.QWidget):
def clearTaskInfo(self):
"""清空任务信息显示"""
self.taskLabel.setText("历史数据")
print(f"ℹ️ [HistoryVideoPanel.clearTaskInfo] 清空任务信息,显示'历史数据'")
# 清空任务时禁用面板
self._setDisabled(True)
self.taskLabel.adjustSize()
......@@ -761,16 +740,12 @@ class HistoryVideoPanel(QtWidgets.QWidget):
if self._main_window and hasattr(self._main_window, 'curvemission'):
mission_name = self._main_window.curvemission.currentText()
if mission_name and mission_name != "请选择任务":
print(f"🔍 [HistoryVideoPanel] 从 curvemission 获取任务: {mission_name}")
return mission_name
else:
print(f"⚠️ [HistoryVideoPanel] curvemission 未选择任务")
return None
print(f"⚠️ [HistoryVideoPanel] 未设置主窗口引用")
return None
except Exception as e:
print(f"❌ [HistoryVideoPanel] 获取任务名称失败: {e}")
return None
def _setDisabled(self, disabled):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment