#!/usr/bin/env python # -*- coding: utf-8 -*- #===================================== 1. Module Imports ===================================== import maya.OpenMayaUI as omui from scripts import config import maya.cmds as cmds import maya.mel as mel import webbrowser import sys import os from scripts import config 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 class RiggingTab(QtWidgets.QWidget): def __init__(self, parent=None): super(RiggingTab, self).__init__(parent) self._setup_ui() self._create_connections() def _setup_ui(self): """设置UI布局""" # === Main Layout === self.main_layout = QtWidgets.QHBoxLayout(self) self.main_layout.setContentsMargins(2, 2, 2, 2) self.main_layout.setSpacing(2) # 创建左右两个主面板 self.dna_browser_widget = self._create_dna_browser() self.asset_settings_widget = self._create_asset_settings() # 设置左右比例为1:1 self.main_layout.addWidget(self.dna_browser_widget, 1) self.main_layout.addWidget(self.asset_settings_widget, 1) def _create_dna_browser(self): """创建DNA预设浏览器""" # === Widget === widget = QtWidgets.QWidget() # === Layout === layout = QtWidgets.QVBoxLayout(widget) layout.setContentsMargins(5, 5, 5, 5) layout.setSpacing(5) # 预设网格视图 self.preset_view = QtWidgets.QListWidget() self.preset_view.setViewMode(QtWidgets.QListView.IconMode) self.preset_view.setIconSize(QtCore.QSize(90, 90)) self.preset_view.setSpacing(10) self.preset_view.setResizeMode(QtWidgets.QListView.Adjust) self.preset_view.setMovement(QtWidgets.QListView.Static) self.preset_view.setWrapping(True) layout.addWidget(self.preset_view) # 缩放控制 zoom_widget = QtWidgets.QWidget() zoom_layout = QtWidgets.QHBoxLayout(zoom_widget) zoom_layout.setContentsMargins(0, 0, 0, 0) zoom_label = QtWidgets.QLabel("缩放:") self.zoom_slider = QtWidgets.QSlider(QtCore.Qt.Horizontal) self.zoom_slider.setMinimum(60) self.zoom_slider.setMaximum(200) self.zoom_slider.setValue(90) self.zoom_value_label = QtWidgets.QLabel("90") zoom_layout.addWidget(zoom_label) zoom_layout.addWidget(self.zoom_slider) zoom_layout.addWidget(self.zoom_value_label) layout.addWidget(zoom_widget) # 导入/导出按钮 button_widget = QtWidgets.QWidget() button_layout = QtWidgets.QHBoxLayout(button_widget) button_layout.setContentsMargins(0, 0, 0, 0) self.import_btn = QtWidgets.QPushButton("导入设置") self.export_btn = QtWidgets.QPushButton("导出设置") button_layout.addWidget(self.import_btn) button_layout.addWidget(self.export_btn) layout.addWidget(button_widget) return widget def _create_asset_settings(self): """创建资产设置面板""" # === Widget === widget = QtWidgets.QWidget() # === Layout === layout = QtWidgets.QVBoxLayout(widget) layout.setContentsMargins(5, 5, 5, 5) layout.setSpacing(5) # 项目路径设置 self.project_group = self._create_project_settings() layout.addWidget(self.project_group) # 数据分层选项 self.layer_group = self._create_layer_settings() layout.addWidget(self.layer_group) # 描述设置 self.desc_group = self._create_description_settings() layout.addWidget(self.desc_group) layout.addStretch() return widget def _create_project_settings(self): """创建项目设置组""" # === Widget === group = QtWidgets.QGroupBox("项目设置") # === Layout === layout = QtWidgets.QFormLayout(group) layout.setContentsMargins(5, 5, 5, 5) layout.setSpacing(5) # 项目路径 path_widget = QtWidgets.QWidget() path_layout = QtWidgets.QHBoxLayout(path_widget) path_layout.setContentsMargins(0, 0, 0, 0) self.project_path = QtWidgets.QLineEdit() self.browse_project_btn = QtWidgets.QPushButton("浏览...") self.browse_project_btn.setFixedWidth(60) path_layout.addWidget(self.project_path) path_layout.addWidget(self.browse_project_btn) layout.addRow("项目路径:", path_widget) # 预设文件 preset_widget = QtWidgets.QWidget() preset_layout = QtWidgets.QHBoxLayout(preset_widget) preset_layout.setContentsMargins(0, 0, 0, 0) self.preset_path = QtWidgets.QLineEdit() self.browse_preset_btn = QtWidgets.QPushButton("浏览...") self.browse_preset_btn.setFixedWidth(60) preset_layout.addWidget(self.preset_path) preset_layout.addWidget(self.browse_preset_btn) layout.addRow("预设文件:", preset_widget) return group def _create_layer_settings(self): """创建数据分层设置组""" # === Widget === group = QtWidgets.QGroupBox("数据分层") # === Layout === layout = QtWidgets.QVBoxLayout(group) layout.setContentsMargins(5, 5, 5, 5) layout.setSpacing(5) self.behavior_check = QtWidgets.QCheckBox("行为(包括描述和定义)") self.expression_check = QtWidgets.QCheckBox("覆盖表情选项") layout.addWidget(self.behavior_check) layout.addWidget(self.expression_check) return group def _create_description_settings(self): """创建描述设置组""" # === Widget === group = QtWidgets.QGroupBox("描述设置") # === Layout === layout = QtWidgets.QFormLayout(group) layout.setContentsMargins(5, 5, 5, 5) layout.setSpacing(5) # 创建设置项 self.name_edit = QtWidgets.QLineEdit("Archetype") self.type_combo = QtWidgets.QComboBox() self.type_combo.addItem("其他") self.gender_combo = QtWidgets.QComboBox() self.gender_combo.addItem("女性") self.age_spin = QtWidgets.QSpinBox() self.age_spin.setValue(24) self.transform_combo = QtWidgets.QComboBox() self.transform_combo.addItem("厘米") self.rotation_combo = QtWidgets.QComboBox() self.rotation_combo.addItem("角度") self.up_axis_combo = QtWidgets.QComboBox() self.up_axis_combo.addItem("Z轴向上") self.lod_spin = QtWidgets.QSpinBox() self.lod_spin.setValue(8) # 添加到布局 layout.addRow("名称:", self.name_edit) layout.addRow("原型:", self.type_combo) layout.addRow("性别:", self.gender_combo) layout.addRow("年龄:", self.age_spin) layout.addRow("变换单位:", self.transform_combo) layout.addRow("旋转单位:", self.rotation_combo) layout.addRow("向上轴标:", self.up_axis_combo) layout.addRow("LOD计数:", self.lod_spin) return group def _create_connections(self): """创建信号连接""" # 缩放滑块 self.zoom_slider.valueChanged.connect(self._on_zoom_changed) # 导入导出按钮 self.import_btn.clicked.connect(self._on_import) self.export_btn.clicked.connect(self._on_export) # 浏览按钮 self.browse_project_btn.clicked.connect(self._on_browse_project) self.browse_preset_btn.clicked.connect(self._on_browse_preset) def _on_zoom_changed(self, value): """缩放值改变""" self.zoom_value_label.setText(str(value)) self.preset_view.setIconSize(QtCore.QSize(value, value)) def _on_import(self): """导入设置""" # TODO: 实现导入逻辑 pass def _on_export(self): """导出设置""" # TODO: 实现导出逻辑 pass def _on_browse_project(self): """浏览项目路径""" # TODO: 实现浏览逻辑 pass def _on_browse_preset(self): """浏览预设文件""" # TODO: 实现浏览逻辑 pass if __name__ == "__main__": pass