#!/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.config import data from scripts.ui import adjust_utils as adjust_utils from scripts.ui import widgets as widgets try: from PySide2 import QtCore, QtGui, QtWidgets from shiboken2 import wrapInstance except ImportError: try: from PySide6 import QtCore, QtGui, QtWidgets from shiboken6 import wrapInstance except ImportError: try: from PySide import QtCore, QtGui, QtWidgets from shiboken import wrapInstance except ImportError as e: QtCore = QtGui = QtWidgets = None wrapInstance = None #===================================== 2. Adjust Tab Class ===================================== class AdjustTab(widgets.BaseWidget): """调整标签页""" def __init__(self, parent=None): self.raw_list = None self.blend_list = None self.raw_slider = None self.blend_slider = None self.raw_value_label = None self.blend_value_label = None super(AdjustTab, self).__init__(parent) def setup_ui(self): """初始化UI""" layout = QtWidgets.QVBoxLayout(self) layout.setSpacing(self.SPACING) layout.setContentsMargins(self.MARGINS, self.MARGINS, self.MARGINS, self.MARGINS) # 创建左右分栏布局 splitter = QtWidgets.QSplitter(QtCore.Qt.Horizontal) layout.addWidget(splitter) # 左侧 Raw Control 列表 left_widget = QtWidgets.QWidget() left_layout = QtWidgets.QVBoxLayout(left_widget) # 标题和计数 left_layout.addWidget(QtWidgets.QLabel("Raw Control [814/814]")) # 搜索框 search_layout = QtWidgets.QHBoxLayout() search_input = widgets.ModernLineEdit() search_input.setPlaceholderText("搜索...") search_layout.addWidget(search_input) left_layout.addLayout(search_layout) # Raw Control列表 self.raw_list = QtWidgets.QListWidget() self.raw_list.setStyleSheet("QListWidget { background-color: #333333; }") left_layout.addWidget(self.raw_list) # 添加示例项 for i, name in enumerate(['browDownL', 'browDownR', 'browLateralL', 'browLateralR', 'browRaiseInL', 'browRaiseInR', 'browRaiseOuterL', 'browRaiseOuterR', 'earUpL', 'earUpR', 'eyeBlinkL']): item = QtWidgets.QListWidgetItem() item.setText(f"{name}") item.setData(QtCore.Qt.UserRole, f"{i:03d}") # 存储编号 self.raw_list.addItem(item) # 数值控制 value_layout = QtWidgets.QHBoxLayout() self.raw_value_label = QtWidgets.QLabel("0.010") value_layout.addWidget(self.raw_value_label) self.raw_slider = QtWidgets.QSlider(QtCore.Qt.Horizontal) self.raw_slider.setRange(0, 100) self.raw_slider.valueChanged.connect(self._on_raw_value_changed) value_layout.addWidget(self.raw_slider) value_layout.addWidget(QtWidgets.QLabel("全部")) left_layout.addLayout(value_layout) # 页码控制 page_layout = QtWidgets.QHBoxLayout() page_layout.addWidget(QtWidgets.QLabel("全部")) for i in range(2, 7): btn = QtWidgets.QPushButton(str(i)) page_layout.addWidget(btn) left_layout.addLayout(page_layout) # 源目标选择 source_layout = QtWidgets.QHBoxLayout() source_layout.addWidget(QtWidgets.QLabel("源目标")) source_layout.addWidget(QtWidgets.QComboBox()) left_layout.addLayout(source_layout) splitter.addWidget(left_widget) # 右侧 Related Blend Shapes 列表 right_widget = QtWidgets.QWidget() right_layout = QtWidgets.QVBoxLayout(right_widget) # 标题和列表 right_layout.addWidget(QtWidgets.QLabel("Related Blend Shapes [858/858]")) self.blend_list = QtWidgets.QListWidget() self.blend_list.setStyleSheet("QListWidget { background-color: #333333; }") # 添加示例项 for i in range(10): item = QtWidgets.QListWidgetItem() item.setText(f"head_lod0_mesh | brow_down_L {i:03d}") self.blend_list.addItem(item) right_layout.addWidget(self.blend_list) # 数值控制 blend_value_layout = QtWidgets.QHBoxLayout() self.blend_value_label = QtWidgets.QLabel("0.000") blend_value_layout.addWidget(self.blend_value_label) self.blend_slider = QtWidgets.QSlider(QtCore.Qt.Horizontal) self.blend_slider.setRange(0, 100) self.blend_slider.valueChanged.connect(self._on_blend_value_changed) blend_value_layout.addWidget(self.blend_slider) blend_value_layout.addWidget(QtWidgets.QLabel("全部")) right_layout.addLayout(blend_value_layout) # 工具按钮组 tools_layout = QtWidgets.QGridLayout() tools = [ ("整理目标", adjust_utils.organize_targets), ("高级混合变形", adjust_utils.advanced_blend), ("重建混合目标", adjust_utils.rebuild_targets), ("添加混合变形", adjust_utils.add_blend), ("删除混合变形", adjust_utils.delete_blend), ("批量混合变形", adjust_utils.batch_blend) ] for i, (text, callback) in enumerate(tools): btn = QtWidgets.QPushButton(text) btn.clicked.connect(lambda checked=False, cb=callback: cb()) row = i // 2 col = i % 2 tools_layout.addWidget(btn, row, col) right_layout.addLayout(tools_layout) # 底部工具栏 bottom_layout = QtWidgets.QVBoxLayout() # 功能开关和数值 toggle_layout = QtWidgets.QHBoxLayout() # 左侧开关 left_toggles = QtWidgets.QHBoxLayout() for text in ["KEY", "MIR", "ARK", "CTR"]: btn = QtWidgets.QPushButton(text) btn.setCheckable(True) left_toggles.addWidget(btn) toggle_layout.addLayout(left_toggles) # 右侧数值 toggle_layout.addStretch() value_spin = QtWidgets.QDoubleSpinBox() value_spin.setValue(0.000) toggle_layout.addWidget(value_spin) toggle_layout.addWidget(QtWidgets.QPushButton("全部")) bottom_layout.addLayout(toggle_layout) # 操作按钮 action_layout = QtWidgets.QGridLayout() actions = [ ("在线帮助", adjust_utils.show_help), ("控制面板编辑", adjust_utils.edit_control_panel), ("控制面板预览", adjust_utils.preview_control_panel), ("导入编辑器", adjust_utils.import_editor), ("导入编辑器预览", adjust_utils.import_editor_preview), ("导入编辑器预览", adjust_utils.import_editor_preview) ] for i, (text, callback) in enumerate(actions): btn = QtWidgets.QPushButton(text) btn.clicked.connect(lambda checked=False, cb=callback: cb()) row = i // 2 col = i % 2 action_layout.addWidget(btn, row, col) bottom_layout.addLayout(action_layout) right_layout.addLayout(bottom_layout) splitter.addWidget(right_widget) # 设置分割器比例 splitter.setSizes([400, 400]) def _on_raw_value_changed(self, value): """Raw Control数值改变""" self.raw_value_label.setText(f"{value/1000:.3f}") def _on_blend_value_changed(self, value): """Blend Shape数值改变""" self.blend_value_label.setText(f"{value/1000:.3f}")