This commit is contained in:
2025-05-11 12:30:41 +08:00
parent bdc873d295
commit eea67c91c8
3 changed files with 564 additions and 47 deletions

View File

@@ -73,6 +73,10 @@ class RiggingUI(ui_utils.BaseUI):
self.main_widget = QtWidgets.QWidget()
self.main_widget.setObjectName("riggingMainWidget")
# 初始化DNA文件列表和按钮尺寸
self.dna_files = []
self.dna_button_size = (120, 150)
# 初始化UI
self.create_widgets()
self.create_layouts()
@@ -81,6 +85,29 @@ class RiggingUI(ui_utils.BaseUI):
# 更新UI文本
self.update_language()
# 加载DNA文件和预览图 - 移到最后执行确保所有控件已创建
self.load_dna_files()
def closeEvent(self, event):
"""
窗口关闭事件处理
清理缓存和资源
"""
try:
# 清理图片缓存
from scripts.utils import utils_rigging
utils_rigging.clear_pixmap_cache()
# 调用父类的关闭事件
super().closeEvent(event)
except Exception as e:
print(f"窗口关闭处理失败: {str(e)}")
import traceback
traceback.print_exc()
# 确保窗口正常关闭
event.accept()
#========================================= WIDGET =======================================
def create_widgets(self):
"""
@@ -121,47 +148,6 @@ class RiggingUI(ui_utils.BaseUI):
self.controls["presets_flow_layout"].setContentsMargins(5, 5, 5, 5)
self.controls["presets_flow_layout"].setSpacing(10)
# 添加测试预设项
for i in range(6): # 添加6个预设项如图中所示
col = i % 6
row = i // 6
preset_widget = QtWidgets.QWidget()
preset_widget.setObjectName(f"preset_{i}")
preset_widget.setMinimumSize(120, 150) # 设置预设项大小
preset_widget.setMaximumSize(120, 150)
# 预设布局
preset_layout = QtWidgets.QVBoxLayout(preset_widget)
preset_layout.setContentsMargins(0, 0, 0, 0)
preset_layout.setSpacing(2)
# 预设图片
preset_image = QtWidgets.QLabel()
preset_image.setObjectName(f"preset_image_{i}")
preset_image.setMinimumSize(120, 120)
preset_image.setMaximumSize(120, 120)
preset_image.setScaledContents(True)
preset_image.setStyleSheet("background-color: #333333; border: 1px solid #555555;")
# 加载测试图片
pixmap = QtGui.QPixmap(os.path.join(ASSETS_PATH, "metahuman_placeholder.png"))
if not pixmap.isNull():
preset_image.setPixmap(pixmap)
# 预设标签
preset_label = QtWidgets.QLabel("METAHUMAN")
preset_label.setObjectName(f"preset_label_{i}")
preset_label.setAlignment(QtCore.Qt.AlignCenter)
preset_label.setStyleSheet("color: white; background-color: rgba(0, 0, 0, 128);")
# 添加到布局
preset_layout.addWidget(preset_image)
preset_layout.addWidget(preset_label)
# 添加到流布局
self.controls["presets_flow_layout"].addWidget(preset_widget, row, col)
# 设置滚动区域内容
self.controls["presets_scroll_area"].setWidget(self.controls["presets_content"])
@@ -171,7 +157,7 @@ class RiggingUI(ui_utils.BaseUI):
self.controls["presets_slider_layout"].setSpacing(5)
# 数量显示
self.controls["presets_count_label"] = QtWidgets.QLabel("99")
self.controls["presets_count_label"] = QtWidgets.QLabel("0")
self.controls["presets_count_label"].setObjectName("presetsCountLabel")
self.controls["presets_count_label"].setAlignment(QtCore.Qt.AlignCenter)
self.controls["presets_count_label"].setStyleSheet("font-weight: bold;")
@@ -486,14 +472,15 @@ class RiggingUI(ui_utils.BaseUI):
# 设置分割器的伸缩因子
for i in range(self.splitters["main_splitter"].count()):
self.splitters["main_splitter"].setStretchFactor(i, 1)
# 监听预设内容区域大小变化更新DNA网格布局
self.controls["presets_content"].resizeEvent = lambda event: utils_rigging.on_presets_content_resize(event, self)
#======================================= FUNCTIONS ======================================
def create_connections(self):
"""
创建信号连接设置UI控件的交互行为
"""
# 导入绑定工具函数
from scripts.utils import utils_rigging
# 预设导入和导出按钮
self.buttons["export_presets"].clicked.connect(utils_rigging.export_dna)
@@ -506,4 +493,25 @@ class RiggingUI(ui_utils.BaseUI):
# 底部按钮连接
self.buttons["remove_all"].clicked.connect(utils_rigging.remove_all)
self.buttons["import_skeleton"].clicked.connect(utils_rigging.import_skeleton)
self.buttons["build_rigging"].clicked.connect(utils_rigging.build_rigging)
self.buttons["build_rigging"].clicked.connect(utils_rigging.build_rigging)
def load_dna_files(self):
"""
加载DNA文件和预览
在所有UI控件创建完成后执行
"""
try:
# 从utils_rigging加载DNA文件和预览图
from scripts.utils import utils_rigging
self.dna_files = utils_rigging.get_dna_files()
# 更新预设数量标签
if 'presets_count_label' in self.controls:
self.controls['presets_count_label'].setText(str(len(self.dna_files)))
# 调用utils_rigging中的加载预览按钮函数
utils_rigging.load_dna_preview_buttons(self)
except Exception as e:
import traceback
print(f"加载DNA文件失败: {str(e)}")
traceback.print_exc()

View File

@@ -20,6 +20,34 @@ QLabel#mainTitleLabel {
padding: 5px;
}
/* ==================== DNA预览按钮样式 ==================== */
QPushButton.dna-preview-button {
background-color: #2D2D30;
border: 1px solid #3E3E42;
border-radius: 8px;
padding: 0;
margin: 4px;
text-align: center;
}
QPushButton.dna-preview-button:hover {
border: 1px solid #007ACC;
background-color: #3E3E42;
}
QPushButton.dna-preview-button:pressed {
border: 1px solid #0062A3;
background-color: #1E1E1E;
}
QPushButton.dna-preview-button QLabel {
color: #FFFFFF;
font-size: 11px;
border-radius: 0;
border-bottom-left-radius: 7px;
border-bottom-right-radius: 7px;
}
/* ==================== 标签页样式 ==================== */
QTabWidget::pane {
border: 1px solid #1E1E1E;