Update
This commit is contained in:
@@ -17,8 +17,8 @@ Behaviour UI Module for Plugin
|
||||
- 控制面板查找
|
||||
"""
|
||||
#========================================= IMPORT =========================================
|
||||
from Qt import QtWidgets, QtCore, QtGui
|
||||
from Qt.QtCompat import wrapInstance
|
||||
from scripts.ui.Qt import QtWidgets, QtCore, QtGui
|
||||
from scripts.ui.Qt.QtCompat import wrapInstance
|
||||
from maya import OpenMayaUI as omui
|
||||
import maya.cmds as cmds
|
||||
import maya.mel as mel
|
||||
@@ -57,51 +57,29 @@ TOOL_WIDTH = config.TOOL_WIDTH
|
||||
TOOL_HEIGHT = config.TOOL_HEIGHT
|
||||
#========================================= LOCATION =======================================
|
||||
from scripts.ui import localization
|
||||
LANG = localization.LANG
|
||||
get_text = localization.get_text
|
||||
TEXT = localization.TEXT
|
||||
|
||||
class BehaviourUI(ui_utils.BaseUI):
|
||||
"""
|
||||
行为系统UI类 - 负责显示角色行为编辑界面和基础操作
|
||||
继承自BaseUI类,实现行为系统相关的UI功能
|
||||
"""
|
||||
# 类变量,存储单例实例
|
||||
_instance = None
|
||||
|
||||
@classmethod
|
||||
def get_instance(cls):
|
||||
"""
|
||||
获取BehaviourUI的单例实例
|
||||
|
||||
Returns:
|
||||
BehaviourUI: 单例实例,如果不存在则返回None
|
||||
"""
|
||||
return cls._instance
|
||||
|
||||
#========================================== INIT ========================================
|
||||
def __init__(self, parent=None):
|
||||
"""
|
||||
初始化行为系统UI
|
||||
"""
|
||||
super(BehaviourUI, self).__init__() # 不传递parent参数给BaseUI
|
||||
|
||||
# 设置单例实例
|
||||
BehaviourUI._instance = self
|
||||
super().__init__(parent)
|
||||
|
||||
# 创建主控件
|
||||
self.main_widget = QtWidgets.QWidget(parent)
|
||||
self.main_widget = QtWidgets.QWidget()
|
||||
self.main_widget.setObjectName("behaviourMainWidget")
|
||||
|
||||
# 初始化控件、布局和按钮字典
|
||||
self.controls = {}
|
||||
self.layouts = {}
|
||||
self.buttons = {}
|
||||
self.splitters = {}
|
||||
|
||||
# 创建UI组件
|
||||
self.create_widgets()
|
||||
self.create_layouts()
|
||||
self.create_connections()
|
||||
|
||||
# 更新UI文本
|
||||
self.update_language()
|
||||
|
||||
# 设置全局样式,确保所有控件都没有最小宽度限制
|
||||
self.main_widget.setStyleSheet("""
|
||||
QWidget { min-width: 0px; }
|
||||
@@ -118,7 +96,7 @@ class BehaviourUI(ui_utils.BaseUI):
|
||||
包括标题标签、搜索框、控制列表、滑块等
|
||||
"""
|
||||
# 标题标签
|
||||
self.controls["title_label"] = QtWidgets.QLabel(get_text("behaviour_title", "行为系统"))
|
||||
self.controls["title_label"] = QtWidgets.QLabel(TEXT("behaviour_title", "行为系统"))
|
||||
self.controls["title_label"].setObjectName("behaviourTitleLabel")
|
||||
self.controls["title_label"].setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.controls["title_label"].setStyleSheet("font-size: 14px; font-weight: bold; padding: 5px;")
|
||||
@@ -141,7 +119,7 @@ class BehaviourUI(ui_utils.BaseUI):
|
||||
# 搜索框
|
||||
self.controls["search_input"] = QtWidgets.QLineEdit()
|
||||
self.controls["search_input"].setObjectName("searchInput")
|
||||
self.controls["search_input"].setPlaceholderText(get_text("search", "搜索..."))
|
||||
self.controls["search_input"].setPlaceholderText(TEXT("search", "搜索..."))
|
||||
self.controls["search_input"].setFixedHeight(25)
|
||||
|
||||
# 控制列表
|
||||
@@ -193,27 +171,27 @@ class BehaviourUI(ui_utils.BaseUI):
|
||||
self.buttons["page_6"].setCheckable(True)
|
||||
|
||||
# 左下角Range按钮
|
||||
self.buttons["range_minus"] = QtWidgets.QPushButton(get_text(" Range - ", " 范围 - "))
|
||||
self.buttons["range_minus"] = QtWidgets.QPushButton(TEXT(" Range - ", " 范围 - "))
|
||||
self.buttons["range_minus"].setObjectName("rangeMinusButton")
|
||||
self.buttons["range_minus"].setIcon(ui_utils.load_icon("behaviour.png"))
|
||||
self.buttons["range_minus"].setMinimumWidth(0)
|
||||
|
||||
|
||||
self.buttons["range_plus"] = QtWidgets.QPushButton(get_text(" Range + ", " 范围 + "))
|
||||
self.buttons["range_plus"] = QtWidgets.QPushButton(TEXT(" Range + ", " 范围 + "))
|
||||
self.buttons["range_plus"].setObjectName("rangePlusButton")
|
||||
self.buttons["range_plus"].setIcon(ui_utils.load_icon("behaviour.png"))
|
||||
self.buttons["range_plus"].setMinimumWidth(0)
|
||||
|
||||
# 左侧面板控件 - Raw Control
|
||||
self.controls["raw_control_group"] = QtWidgets.QGroupBox(get_text("Raw Control", "原始控制"))
|
||||
self.controls["raw_control_group"] = QtWidgets.QGroupBox(TEXT("Raw Control", "原始控制"))
|
||||
self.controls["raw_control_group"].setObjectName("rawControlGroup")
|
||||
self.controls["raw_control_group"].setTitle(get_text("Raw Control", "原始控制"))
|
||||
self.controls["raw_control_group"].setTitle(TEXT("Raw Control", "原始控制"))
|
||||
self.controls["raw_control_group"].setFixedHeight(25)
|
||||
|
||||
# 右侧面板控件 - Related BlendShapes
|
||||
self.controls["blendshapes_group"] = QtWidgets.QGroupBox(get_text("Related BlendShapes", "相关BlendShapes"))
|
||||
self.controls["blendshapes_group"] = QtWidgets.QGroupBox(TEXT("Related BlendShapes", "相关BlendShapes"))
|
||||
self.controls["blendshapes_group"].setObjectName("blendshapesGroup")
|
||||
self.controls["blendshapes_group"].setTitle(get_text("Related BlendShapes", "相关BlendShapes"))
|
||||
self.controls["blendshapes_group"].setTitle(TEXT("Related BlendShapes", "相关BlendShapes"))
|
||||
self.controls["blendshapes_group"].setFixedHeight(25)
|
||||
|
||||
# BlendShapes列表
|
||||
@@ -239,60 +217,60 @@ class BehaviourUI(ui_utils.BaseUI):
|
||||
self.controls["bs_slider_all_check"].setObjectName("bsSliderAllCheck")
|
||||
|
||||
# 右下角BS Range按钮
|
||||
self.buttons["bs_range_minus"] = QtWidgets.QPushButton(get_text(" Range - ", " 范围 - "))
|
||||
self.buttons["bs_range_minus"] = QtWidgets.QPushButton(TEXT(" Range - ", " 范围 - "))
|
||||
self.buttons["bs_range_minus"].setObjectName("bsRangeMinusButton")
|
||||
self.buttons["bs_range_minus"].setIcon(ui_utils.load_icon("behaviour.png"))
|
||||
self.buttons["bs_range_minus"].setMinimumWidth(0)
|
||||
|
||||
self.buttons["bs_range_plus"] = QtWidgets.QPushButton(get_text(" Range + ", " 范围 + "))
|
||||
self.buttons["bs_range_plus"] = QtWidgets.QPushButton(TEXT(" Range + ", " 范围 + "))
|
||||
self.buttons["bs_range_plus"].setObjectName("bsRangePlusButton")
|
||||
self.buttons["bs_range_plus"].setIcon(ui_utils.load_icon("behaviour.png"))
|
||||
self.buttons["bs_range_plus"].setMinimumWidth(0)
|
||||
|
||||
# BlendShape操作按钮
|
||||
self.buttons["flip_target"] = QtWidgets.QPushButton(get_text("Flip Target", "翻转目标"))
|
||||
self.buttons["flip_target"] = QtWidgets.QPushButton(TEXT("Flip Target", "翻转目标"))
|
||||
self.buttons["flip_target"].setObjectName("flipTargetButton")
|
||||
self.buttons["flip_target"].setIcon(ui_utils.load_icon("mirrorL.png"))
|
||||
|
||||
self.buttons["mirror_target"] = QtWidgets.QPushButton(get_text("Mirror Target", "镜像目标"))
|
||||
self.buttons["mirror_target"] = QtWidgets.QPushButton(TEXT("Mirror Target", "镜像目标"))
|
||||
self.buttons["mirror_target"].setObjectName("mirrorTargetButton")
|
||||
self.buttons["mirror_target"].setIcon(ui_utils.load_icon("mirror.png"))
|
||||
|
||||
self.buttons["find_flip_target"] = QtWidgets.QPushButton(get_text("Find Flip Target", "查找翻转目标"))
|
||||
self.buttons["find_flip_target"] = QtWidgets.QPushButton(TEXT("Find Flip Target", "查找翻转目标"))
|
||||
self.buttons["find_flip_target"].setObjectName("findFlipTargetButton")
|
||||
self.buttons["find_flip_target"].setIcon(ui_utils.load_icon("mirrorR.png"))
|
||||
|
||||
self.buttons["add_blendshape"] = QtWidgets.QPushButton(get_text("Add BlendShape", "添加BlendShape"))
|
||||
self.buttons["add_blendshape"] = QtWidgets.QPushButton(TEXT("Add BlendShape", "添加BlendShape"))
|
||||
self.buttons["add_blendshape"].setObjectName("addBlendshapeButton")
|
||||
self.buttons["add_blendshape"].setIcon(ui_utils.load_icon("blendShape.png"))
|
||||
|
||||
self.buttons["delete_blendshape"] = QtWidgets.QPushButton(get_text("Delete BlendShape", "删除BlendShape"))
|
||||
self.buttons["delete_blendshape"] = QtWidgets.QPushButton(TEXT("Delete BlendShape", "删除BlendShape"))
|
||||
self.buttons["delete_blendshape"].setObjectName("deleteBlendshapeButton")
|
||||
self.buttons["delete_blendshape"].setIcon(ui_utils.load_icon("blendShape.png"))
|
||||
|
||||
self.buttons["batch_blendshape"] = QtWidgets.QPushButton(get_text("Batch BlendShape", "批量BlendShape"))
|
||||
self.buttons["batch_blendshape"] = QtWidgets.QPushButton(TEXT("Batch BlendShape", "批量BlendShape"))
|
||||
self.buttons["batch_blendshape"].setObjectName("batchBlendshapeButton")
|
||||
self.buttons["batch_blendshape"].setIcon(ui_utils.load_icon("blendShape.png"))
|
||||
|
||||
self.buttons["bs_range_minus"] = QtWidgets.QPushButton(get_text(" Range - ", " 范围 - "))
|
||||
self.buttons["bs_range_minus"] = QtWidgets.QPushButton(TEXT(" Range - ", " 范围 - "))
|
||||
self.buttons["bs_range_minus"].setObjectName("bsRangeMinusButton")
|
||||
self.buttons["bs_range_minus"].setIcon(ui_utils.load_icon("behaviour.png"))
|
||||
self.buttons["bs_range_minus"].setMinimumWidth(0)
|
||||
|
||||
self.buttons["bs_range_plus"] = QtWidgets.QPushButton(get_text(" Range + ", " 范围 + "))
|
||||
self.buttons["bs_range_plus"] = QtWidgets.QPushButton(TEXT(" Range + ", " 范围 + "))
|
||||
self.buttons["bs_range_plus"].setObjectName("bsRangePlusButton")
|
||||
self.buttons["bs_range_plus"].setIcon(ui_utils.load_icon("behaviour.png"))
|
||||
self.buttons["bs_range_plus"].setMinimumWidth(0)
|
||||
|
||||
self.buttons["rebuild_select"] = QtWidgets.QPushButton(get_text("Rebuild Select", "重建选择"))
|
||||
self.buttons["rebuild_select"] = QtWidgets.QPushButton(TEXT("Rebuild Select", "重建选择"))
|
||||
self.buttons["rebuild_select"].setObjectName("rebuildSelectButton")
|
||||
self.buttons["rebuild_select"].setIcon(ui_utils.load_icon("loading.png"))
|
||||
|
||||
self.buttons["reposition_joints"] = QtWidgets.QPushButton(get_text("Reposition Joints", "重新定位关节"))
|
||||
self.buttons["reposition_joints"] = QtWidgets.QPushButton(TEXT("Reposition Joints", "重新定位关节"))
|
||||
self.buttons["reposition_joints"].setObjectName("repositionJointsButton")
|
||||
self.buttons["reposition_joints"].setIcon(ui_utils.load_icon("loading.png"))
|
||||
|
||||
self.buttons["blend_select"] = QtWidgets.QPushButton(get_text("Blend Select", "混合选择"))
|
||||
self.buttons["blend_select"] = QtWidgets.QPushButton(TEXT("Blend Select", "混合选择"))
|
||||
self.buttons["blend_select"].setObjectName("blendSelectButton")
|
||||
self.buttons["blend_select"].setIcon(ui_utils.load_icon("loading.png"))
|
||||
|
||||
@@ -314,64 +292,64 @@ class BehaviourUI(ui_utils.BaseUI):
|
||||
self.controls["bottom_slider_all_check"].setObjectName("bottomSliderAllCheck")
|
||||
|
||||
# 底部标签页按钮
|
||||
self.buttons["tab_psd"] = QtWidgets.QPushButton(get_text("PSD", "PSD"))
|
||||
self.buttons["tab_psd"] = QtWidgets.QPushButton(TEXT("PSD", "PSD"))
|
||||
self.buttons["tab_psd"].setIcon(ui_utils.load_icon("psd.png"))
|
||||
self.buttons["tab_psd"].setObjectName("tabPsdButton")
|
||||
self.buttons["tab_psd"].setCheckable(True)
|
||||
self.buttons["tab_psd"].setChecked(True)
|
||||
|
||||
self.buttons["tab_bse"] = QtWidgets.QPushButton(get_text("BSE", "BSE"))
|
||||
self.buttons["tab_bse"] = QtWidgets.QPushButton(TEXT("BSE", "BSE"))
|
||||
self.buttons["tab_bse"].setIcon(ui_utils.load_icon("blendShape.png"))
|
||||
self.buttons["tab_bse"].setObjectName("tabBseButton")
|
||||
self.buttons["tab_bse"].setCheckable(True)
|
||||
self.buttons["tab_bse"].setChecked(True)
|
||||
|
||||
self.buttons["tab_key"] = QtWidgets.QPushButton(get_text("KEY", "KEY"))
|
||||
self.buttons["tab_key"] = QtWidgets.QPushButton(TEXT("KEY", "KEY"))
|
||||
self.buttons["tab_key"].setIcon(ui_utils.load_icon("setKeyOnAnim.png"))
|
||||
self.buttons["tab_key"].setObjectName("tabKeyButton")
|
||||
self.buttons["tab_key"].setCheckable(True)
|
||||
self.buttons["tab_key"].setChecked(True)
|
||||
|
||||
self.buttons["tab_mir"] = QtWidgets.QPushButton(get_text("MIR", "MIR"))
|
||||
self.buttons["tab_mir"] = QtWidgets.QPushButton(TEXT("MIR", "MIR"))
|
||||
self.buttons["tab_mir"].setIcon(ui_utils.load_icon("mirrorR.png"))
|
||||
self.buttons["tab_mir"].setObjectName("tabMirButton")
|
||||
self.buttons["tab_mir"].setCheckable(True)
|
||||
self.buttons["tab_mir"].setChecked(True)
|
||||
|
||||
self.buttons["tab_ark"] = QtWidgets.QPushButton(get_text("ARK", "ARK"))
|
||||
self.buttons["tab_ark"] = QtWidgets.QPushButton(TEXT("ARK", "ARK"))
|
||||
self.buttons["tab_ark"].setIcon(ui_utils.load_icon("ARKit52.png"))
|
||||
self.buttons["tab_ark"].setObjectName("tabArkButton")
|
||||
self.buttons["tab_ark"].setCheckable(True)
|
||||
self.buttons["tab_ark"].setChecked(True)
|
||||
|
||||
self.buttons["tab_ctr"] = QtWidgets.QPushButton(get_text("CTR", "CTR"))
|
||||
self.buttons["tab_ctr"] = QtWidgets.QPushButton(TEXT("CTR", "CTR"))
|
||||
self.buttons["tab_ctr"].setIcon(ui_utils.load_icon("ctrl_hide.png"))
|
||||
self.buttons["tab_ctr"].setObjectName("tabCtrButton")
|
||||
self.buttons["tab_ctr"].setCheckable(True)
|
||||
self.buttons["tab_ctr"].setChecked(True)
|
||||
|
||||
# 底部功能按钮
|
||||
self.buttons["reset_default_expression"] = QtWidgets.QPushButton(get_text("Reset Default", "重置默认"))
|
||||
self.buttons["reset_default_expression"] = QtWidgets.QPushButton(TEXT("Reset Default", "重置默认"))
|
||||
self.buttons["reset_default_expression"].setIcon(ui_utils.load_icon("reset.png"))
|
||||
self.buttons["reset_default_expression"].setObjectName("resetDefaultExpressionButton")
|
||||
|
||||
self.buttons["find_select_expression"] = QtWidgets.QPushButton(get_text("Find Select", "查找选择"))
|
||||
self.buttons["find_select_expression"] = QtWidgets.QPushButton(TEXT("Find Select", "查找选择"))
|
||||
self.buttons["find_select_expression"].setIcon(ui_utils.load_icon("expressions_current.png"))
|
||||
self.buttons["find_select_expression"].setObjectName("findSelectExpressionButton")
|
||||
|
||||
self.buttons["write_current_expressions"] = QtWidgets.QPushButton(get_text("Write Current", "写入当前"))
|
||||
self.buttons["write_current_expressions"] = QtWidgets.QPushButton(TEXT("Write Current", "写入当前"))
|
||||
self.buttons["write_current_expressions"].setIcon(ui_utils.load_icon("expression.png"))
|
||||
self.buttons["write_current_expressions"].setObjectName("writeCurrentExpressionsButton")
|
||||
|
||||
self.buttons["controller_find"] = QtWidgets.QPushButton(get_text("Controller Find", "控制器查找"))
|
||||
self.buttons["controller_find"] = QtWidgets.QPushButton(TEXT("Controller Find", "控制器查找"))
|
||||
self.buttons["controller_find"].setIcon(ui_utils.load_icon("controller.png"))
|
||||
self.buttons["controller_find"].setObjectName("controllerFindButton")
|
||||
|
||||
self.buttons["select_associated_joint"] = QtWidgets.QPushButton(get_text("Select Joint", "选择关节"))
|
||||
self.buttons["select_associated_joint"] = QtWidgets.QPushButton(TEXT("Select Joint", "选择关节"))
|
||||
self.buttons["select_associated_joint"].setIcon(ui_utils.load_icon("out_joint.png"))
|
||||
self.buttons["select_associated_joint"].setObjectName("selectAssociatedJointButton")
|
||||
|
||||
self.buttons["write_find_mirror"] = QtWidgets.QPushButton(get_text("Find Mirror", "查找镜像"))
|
||||
self.buttons["write_find_mirror"] = QtWidgets.QPushButton(TEXT("Find Mirror", "查找镜像"))
|
||||
self.buttons["write_find_mirror"].setIcon(ui_utils.load_icon("mirror.png"))
|
||||
self.buttons["write_find_mirror"].setObjectName("writeFindMirrorButton")
|
||||
|
||||
@@ -417,7 +395,7 @@ class BehaviourUI(ui_utils.BaseUI):
|
||||
self.layouts["left_content_layout"].setSpacing(5)
|
||||
|
||||
# 添加标题标签
|
||||
left_title = QtWidgets.QLabel(get_text("Raw Control", "原始控制"))
|
||||
left_title = QtWidgets.QLabel(TEXT("Raw Control", "原始控制"))
|
||||
left_title.setStyleSheet("font-weight: bold;")
|
||||
self.layouts["left_content_layout"].addWidget(left_title)
|
||||
|
||||
@@ -481,7 +459,7 @@ class BehaviourUI(ui_utils.BaseUI):
|
||||
self.layouts["right_content_layout"].setSpacing(5)
|
||||
|
||||
# 添加标题标签
|
||||
right_title = QtWidgets.QLabel(get_text("Related BlendShapes", "相关BlendShapes"))
|
||||
right_title = QtWidgets.QLabel(TEXT("Related BlendShapes", "相关BlendShapes"))
|
||||
right_title.setStyleSheet("font-weight: bold;")
|
||||
self.layouts["right_content_layout"].addWidget(right_title)
|
||||
|
||||
|
Reference in New Issue
Block a user