Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
O
Oil_Level_Recognition_System
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
Oil_Level_Recognition_System
Commits
a4f905c9
Commit
a4f905c9
authored
Nov 26, 2025
by
Yuhaibo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1
parent
bd3dd6ab
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
147 additions
and
145 deletions
+147
-145
CLEANUP_PROGRESS.md
handlers/CLEANUP_PROGRESS.md
+16
-12
datapreprocess_handler.py
handlers/datasetpage/datapreprocess_handler.py
+7
-7
model_test_handler.py
handlers/modelpage/model_test_handler.py
+8
-17
curvepanel_handler.py
handlers/videopage/curvepanel_handler.py
+8
-16
thread_manager.py
handlers/videopage/thread_manager/thread_manager.py
+8
-14
style_manager.py
widgets/style_manager.py
+98
-0
curvepanel.py
widgets/videopage/curvepanel.py
+0
-4
general_set.py
widgets/videopage/general_set.py
+1
-49
historyvideopanel.py
widgets/videopage/historyvideopanel.py
+1
-26
No files found.
handlers/CLEANUP_PROGRESS.md
View file @
a4f905c9
...
...
@@ -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语句
### 部分清理
1
4
.
🔄
**handlers/videopage/missionpanel_handler.py**
- 已清理前330行,删除约20处print语句(文件共2050行,需继续清理)
1
7
.
🔄
**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
### 剩余工作量估算
-
已清理: 约2
34处调试语句 (13
个文件完全清理 + 1个文件部分清理)
-
剩余: 约3
207
处调试语句
-
预计需要: 继续手动清理约
50
个文件
-
已清理: 约2
83处调试语句 (16
个文件完全清理 + 1个文件部分清理)
-
剩余: 约3
158
处调试语句
-
预计需要: 继续手动清理约
47
个文件
### 本次清理总结 (2025-11-26 20:
2
0)
-
完成文件数: 1
3
个完全清理 + 1个部分清理
-
删除调试语句: 约2
34
处
### 本次清理总结 (2025-11-26 20:
3
0)
-
完成文件数: 1
6
个完全清理 + 1个部分清理
-
删除调试语句: 约2
83
处
-
主要清理内容:
-
核心应用入口和窗口管理 (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 (mission
panel.py)
-
完整UI组件系统 (missionpanel.py, general_set.py, curvepanel.py, historyvideo
panel.py)
-
部分任务面板Handler (missionpanel_handler.py)
---
*最后更新: 2025-11-26 20:
2
0*
*最后更新: 2025-11-26 20:
3
0*
handlers/datasetpage/datapreprocess_handler.py
View file @
a4f905c9
...
...
@@ -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
:
# 提取配置
...
...
handlers/modelpage/model_test_handler.py
View file @
a4f905c9
...
...
@@ -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
)
# 应用全局进度条样式管理器到进度对话框中的进度条
...
...
handlers/videopage/curvepanel_handler.py
View file @
a4f905c9
...
...
@@ -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
()
...
...
handlers/videopage/thread_manager/thread_manager.py
View file @
a4f905c9
...
...
@@ -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
()
...
...
widgets/style_manager.py
View file @
a4f905c9
...
...
@@ -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
...
...
widgets/videopage/curvepanel.py
View file @
a4f905c9
...
...
@@ -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
):
"""
...
...
widgets/videopage/general_set.py
View file @
a4f905c9
This diff is collapsed.
Click to expand it.
widgets/videopage/historyvideopanel.py
View file @
a4f905c9
...
...
@@ -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
):
"""进度条按下"""
p
rint
(
f
"[HistoryVideoPanel] 进度条被按下"
)
p
ass
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
):
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment