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
progress_dialog = QtWidgets.QProgressDialog(
"正在加载曲线数据...",
"取消",
0,
100 # 使用百分比进度
from widgets.style_manager import DialogManager
# 🔥 使用全局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):
"""
......
......@@ -742,7 +742,6 @@ class GeneralSetPanel(QtWidgets.QWidget):
self.model_setting_widget.readModelDescriptionRequested.emit(absolute_path)
except Exception as e:
print(f"[GeneralSetPanel] 应用模型配置失败: {e}")
import traceback
traceback.print_exc()
......@@ -754,7 +753,6 @@ class GeneralSetPanel(QtWidgets.QWidget):
model_path: 新选择的模型路径(绝对路径)
"""
if not self.channel_id:
print(f"[GeneralSetPanel] 无法保存:channel_id 为空")
return
# 发送信号给handler处理实际的文件保存逻辑
......@@ -1053,12 +1051,10 @@ class AnnotationWidget(QtWidgets.QWidget):
def _applyFullScreen(self):
"""应用全屏模式(延迟调用,确保控件已初始化)"""
self.showFullScreen()
print(f"[AnnotationWidget] 已应用全屏模式,image_label大小: {self.image_label.width()}x{self.image_label.height()}")
# 🔥 关键修复:全屏后立即更新显示,确保标注帧立即全屏显示
if self.current_frame is not None:
self._updateDisplay()
print(f"[AnnotationWidget] 已更新显示内容")
def setAnnotationEngine(self, engine):
"""设置标注引擎"""
......@@ -1100,7 +1096,6 @@ class AnnotationWidget(QtWidgets.QWidget):
elif current_state == "满":
self.area_states[area_index] = "默认"
print(f"区域 {area_index+1} 状态已切换为: {self.area_states[area_index]}")
self._updateDisplay()
def loadFrame(self, frame):
......@@ -1522,9 +1517,6 @@ class AnnotationWidget(QtWidgets.QWidget):
# 设置对齐方式为居中,这样图像会自动居中显示
self.image_label.setAlignment(Qt.AlignCenter)
print(f"[显示图像] 原始尺寸: {img_width}x{img_height}, 缩放后: {scaled_width}x{scaled_height}")
print(f"[显示图像] 缩放因子: {self.scale_factor}, 偏移: ({self.offset_x}, {self.offset_y})")
def _updateStatus(self):
"""更新状态显示(已删除状态栏,此方法保留用于兼容性)"""
......@@ -1558,16 +1550,12 @@ class AnnotationWidget(QtWidgets.QWidget):
self.annotation_engine.bottom_points.append((image_x, image_y))
self.annotation_engine.step = 2
self._updateDisplay()
else:
print("请在检测框内点击设置容器底部点")
elif self.annotation_engine.step == 2: # 点击顶部模式
# 检查点击位置是否在最后一个检测框内
if self._isPointInLastBox(image_x, image_y):
self.annotation_engine.top_points.append((image_x, image_y))
self.annotation_engine.step = 0
self._updateDisplay()
else:
print("请在检测框内点击设置容器顶部点")
def _onMouseMove(self, event):
"""鼠标移动事件"""
......@@ -1748,10 +1736,8 @@ class AnnotationWidget(QtWidgets.QWidget):
if new_text and self.editing_area_index >= 0:
if self.editing_type == 'name':
self.area_names[self.editing_area_index] = new_text
print(f"区域{self.editing_area_index+1}名称已更新: {new_text}")
elif self.editing_type == 'height':
self.area_heights[self.editing_area_index] = new_text
print(f"区域{self.editing_area_index+1}高度已更新: {new_text}")
self._updateDisplay()
......@@ -1806,9 +1792,6 @@ class AnnotationWidget(QtWidgets.QWidget):
image_x = max(0, min(image_x, img_width - 1))
image_y = max(0, min(image_y, img_height - 1))
print(f"[坐标转换] 标签坐标: ({label_x}, {label_y}) -> 图像坐标: ({image_x}, {image_y})")
print(f"[坐标转换] 缩放因子: {self.scale_factor}, 偏移: ({self.offset_x}, {self.offset_y})")
return image_x, image_y
def _isPointInLastBox(self, x, y):
......@@ -1843,7 +1826,6 @@ class AnnotationWidget(QtWidgets.QWidget):
# 画框模式:删除最后一个检测框
if len(self.annotation_engine.boxes) > 0:
removed_box = self.annotation_engine.boxes.pop()
print(f"已删除最后一个检测框: {removed_box}")
# 同时删除对应的底部点和顶部点
if len(self.annotation_engine.bottom_points) > 0:
......@@ -1860,14 +1842,11 @@ class AnnotationWidget(QtWidgets.QWidget):
self.area_states.pop()
self._updateDisplay()
else:
print("没有可删除的检测框")
elif self.annotation_engine.step == 1:
# 标注底部点模式:删除最后一个检测框(回退到画框模式)
if len(self.annotation_engine.boxes) > 0:
removed_box = self.annotation_engine.boxes.pop()
print(f"已删除最后一个检测框: {removed_box}")
# 同时删除对应的区域名称和高度
if len(self.area_names) > 0:
......@@ -1880,20 +1859,15 @@ class AnnotationWidget(QtWidgets.QWidget):
# 回到画框模式
self.annotation_engine.step = 0
self._updateDisplay()
else:
print("没有可删除的检测框")
elif self.annotation_engine.step == 2:
# 标注顶部点模式:删除最后一个底部点(回退到标注底部点模式)
if len(self.annotation_engine.bottom_points) > 0:
removed_point = self.annotation_engine.bottom_points.pop()
print(f"已删除最后一个底部点: {removed_point}")
# 回到标注底部点模式
self.annotation_engine.step = 1
self._updateDisplay()
else:
print("没有可删除的底部点")
def _onReset(self):
"""重置标注(按R键触发)"""
......@@ -1921,43 +1895,33 @@ class AnnotationWidget(QtWidgets.QWidget):
if event.key() == Qt.Key_R:
# R键:重置所有标注
self._onReset()
print("🔄 快捷键 R: 重置所有标注")
elif event.key() == Qt.Key_C:
# C键:完成标注
self._onComplete()
print("✅ 快捷键 C: 完成标注")
elif event.key() == Qt.Key_D:
# D键:删除最后一个标注框(等同于右键)
self._onRightClick()
print("快捷键 D: 删除最后一个标注")
elif event.key() == Qt.Key_U:
# U键:撤销上一步操作(等同于右键)
self._onRightClick()
print("↩️ 快捷键 U: 撤销上一步操作")
elif event.key() == Qt.Key_S:
# S键:保存当前标注(完成标注)
self._onComplete()
print("💾 快捷键 S: 保存标注")
elif event.key() == Qt.Key_H:
# H键:显示/隐藏帮助信息
self._toggleHelpDisplay()
print("❓ 快捷键 H: 切换帮助显示")
elif event.key() == Qt.Key_1:
# 1键:快速设置区域1高度为20mm
self._quickSetHeight(0, "20mm")
print("🔢 快捷键 1: 设置区域1高度为20mm")
elif event.key() == Qt.Key_2:
# 2键:快速设置区域2高度为20mm
self._quickSetHeight(1, "20mm")
print("🔣 快捷键 2: 设置区域2高度为20mm")
elif event.key() == Qt.Key_3:
# 3键:快速设置区域3高度为20mm
self._quickSetHeight(2, "20mm")
print("🔤 快捷键 3: 设置区域3高度为20mm")
elif event.key() == Qt.Key_Escape:
# ESC键:关闭窗口
self.close()
print("❌ 快捷键 ESC: 关闭标注窗口")
else:
super().keyPressEvent(event)
......@@ -1992,32 +1956,26 @@ class AnnotationWidget(QtWidgets.QWidget):
# 删除检测框
removed_box = self.annotation_engine.boxes.pop(area_index)
print(f"已删除检测框 {area_index+1}: {removed_box}")
# 删除对应的底部点
if area_index < len(self.annotation_engine.bottom_points):
removed_bottom = self.annotation_engine.bottom_points.pop(area_index)
print(f"已删除底部点 {area_index+1}: {removed_bottom}")
# 删除对应的顶部点
if area_index < len(self.annotation_engine.top_points):
removed_top = self.annotation_engine.top_points.pop(area_index)
print(f"已删除顶部点 {area_index+1}: {removed_top}")
# 删除对应的区域名称
if area_index < len(self.area_names):
removed_name = self.area_names.pop(area_index)
print(f"已删除区域名称 {area_index+1}: {removed_name}")
# 删除对应的区域高度
if area_index < len(self.area_heights):
removed_height = self.area_heights.pop(area_index)
print(f"已删除区域高度 {area_index+1}: {removed_height}")
# 删除对应的区域状态
if area_index < len(self.area_states):
removed_state = self.area_states.pop(area_index)
print(f"已删除区域状态 {area_index+1}: {removed_state}")
# 更新显示
self._updateDisplay()
......@@ -2038,10 +1996,7 @@ class AnnotationWidget(QtWidgets.QWidget):
self._help_visible = not self._help_visible
if self._help_visible:
print("帮助信息已显示")
else:
print("帮助信息已隐藏")
pass
# 更新显示
self._updateDisplay()
......@@ -2049,7 +2004,6 @@ class AnnotationWidget(QtWidgets.QWidget):
def _quickSetHeight(self, area_index, height_value):
"""快速设置指定区域的高度"""
if area_index < 0 or area_index >= len(self.annotation_engine.boxes):
print(f"区域 {area_index+1} 不存在,无法设置高度")
return
# 确保区域配置存在
......@@ -2059,8 +2013,6 @@ class AnnotationWidget(QtWidgets.QWidget):
old_height = self.area_heights[area_index]
self.area_heights[area_index] = height_value
print(f"区域 {area_index+1} 高度已更新: {old_height} → {height_value}")
# 更新显示
self._updateDisplay()
......
......@@ -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