#!/usr/bin/env python # -*- coding: utf-8 -*- #===================================== 1. Module Imports ===================================== import maya.cmds as cmds import maya.mel as mel import sys import os from scripts.ui.widgets import ( BaseWidget, IconButton, SearchLineEdit) try: from PySide2 import QtCore, QtGui, QtWidgets from shiboken2 import wrapInstance print("从PySide2加载Qt和shiboken2") except ImportError: try: from PySide6 import QtCore, QtGui, QtWidgets from shiboken6 import wrapInstance print("从PySide6加载Qt和shiboken6") except ImportError: try: from PySide import QtCore, QtGui, QtWidgets from shiboken import wrapInstance print("从PySide加载Qt和shiboken") except ImportError as e: print(f"Qt加载失败: {str(e)}") QtCore = QtGui = QtWidgets = None wrapInstance = None #===================================== 2. Define Tab Class ===================================== class DefineTab(BaseWidget): """定义标签页""" def __init__(self, parent=None): super(DefineTab, self).__init__(parent) def setup_ui(self): layout = QtWidgets.QVBoxLayout(self) # 创建滚动区域 scroll = QtWidgets.QScrollArea() scroll.setWidgetResizable(True) scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) layout.addWidget(scroll) # 创建内容控件 content = QtWidgets.QWidget() content_layout = QtWidgets.QVBoxLayout(content) scroll.setWidget(content) # DNA定义部分 dna_group = self.create_dna_definition() content_layout.addWidget(dna_group) # 骨骼定义部分 joint_group = self.create_joint_definition() content_layout.addWidget(joint_group) # BlendShape定义部分 bs_group = self.create_blendshape_definition() content_layout.addWidget(bs_group) content_layout.addStretch() def create_dna_definition(self): """创建DNA定义组""" group = QtWidgets.QGroupBox("DNA定义") layout = QtWidgets.QVBoxLayout(group) # DNA文件选择 file_layout = QtWidgets.QHBoxLayout() file_layout.addWidget(QtWidgets.QLabel("DNA文件:")) self.dna_file_input = QtWidgets.QLineEdit() file_layout.addWidget(self.dna_file_input) browse_btn = IconButton("target.png", "浏览DNA文件") browse_btn.clicked.connect(self.browse_dna_file) file_layout.addWidget(browse_btn) layout.addLayout(file_layout) # DNA预览 preview_group = QtWidgets.QGroupBox("DNA预览") preview_layout = QtWidgets.QVBoxLayout(preview_group) self.dna_preview = QtWidgets.QTextEdit() self.dna_preview.setReadOnly(True) preview_layout.addWidget(self.dna_preview) layout.addWidget(preview_group) return group def create_joint_definition(self): """创建骨骼定义组""" group = QtWidgets.QGroupBox("骨骼定义") layout = QtWidgets.QVBoxLayout(group) # 骨骼列表 self.joint_list = QtWidgets.QTreeWidget() self.joint_list.setHeaderLabels(["骨骼名称", "位置", "旋转", "缩放"]) layout.addWidget(self.joint_list) # 骨骼工具栏 tools_layout = QtWidgets.QHBoxLayout() # 添加骨骼 add_btn = IconButton("joint.png", "添加骨骼") add_btn.clicked.connect(self.add_joint) tools_layout.addWidget(add_btn) # 删除骨骼 del_btn = IconButton("delete.png", "删除骨骼") del_btn.clicked.connect(self.delete_joint) tools_layout.addWidget(del_btn) # 修改骨骼 mod_btn = IconButton("modify.png", "修改骨骼") mod_btn.clicked.connect(self.modify_joint) tools_layout.addWidget(mod_btn) tools_layout.addStretch() layout.addLayout(tools_layout) return group def create_blendshape_definition(self): """创建BlendShape定义组""" group = QtWidgets.QGroupBox("BlendShape定义") layout = QtWidgets.QVBoxLayout(group) # BlendShape列表 self.bs_list = QtWidgets.QTreeWidget() self.bs_list.setHeaderLabels(["名称", "目标", "权重"]) layout.addWidget(self.bs_list) # BlendShape工具栏 tools_layout = QtWidgets.QHBoxLayout() # 添加BlendShape add_btn = IconButton("blendShape.png", "添加BlendShape") add_btn.clicked.connect(self.add_blendshape) tools_layout.addWidget(add_btn) # 删除BlendShape del_btn = IconButton("delete.png", "删除BlendShape") del_btn.clicked.connect(self.delete_blendshape) tools_layout.addWidget(del_btn) # 修改BlendShape mod_btn = IconButton("modify.png", "修改BlendShape") mod_btn.clicked.connect(self.modify_blendshape) tools_layout.addWidget(mod_btn) tools_layout.addStretch() layout.addLayout(tools_layout) return group # DNA定义回调 def browse_dna_file(self): """浏览DNA文件""" from scripts.utils import define_utils define_utils.browse_dna_file() # 骨骼定义回调 def add_joint(self): """添加骨骼""" from scripts.utils import define_utils define_utils.add_joint() def delete_joint(self): """删除骨骼""" from scripts.utils import define_utils define_utils.delete_joint() def modify_joint(self): """修改骨骼""" from scripts.utils import define_utils define_utils.modify_joint() # BlendShape定义回调 def add_blendshape(self): """添加BlendShape""" from scripts.utils import define_utils define_utils.add_blendshape() def delete_blendshape(self): """删除BlendShape""" from scripts.utils import define_utils define_utils.delete_blendshape() def modify_blendshape(self): """修改BlendShape""" from scripts.utils import define_utils define_utils.modify_blendshape()