MetaFusion/scripts/ui/behaviour.py

202 lines
6.6 KiB
Python
Raw Normal View History

2025-02-09 22:11:50 +08:00
#!/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 BehaviourTab(QtWidgets.QWidget):
2025-02-09 23:22:48 +08:00
def __init__(self, parent=None):
super(BehaviourTab, self).__init__(parent)
self._setup_ui()
self._create_connections()
def _setup_ui(self):
"""设置UI布局"""
# 创建主布局
self.main_layout = QtWidgets.QHBoxLayout(self)
self.main_layout.setContentsMargins(2, 2, 2, 2)
self.main_layout.setSpacing(2)
# 创建左右两个主面板
self.raw_control_widget = self._create_raw_control()
self.blend_shapes_widget = self._create_blend_shapes()
self.main_layout.addWidget(self.raw_control_widget)
self.main_layout.addWidget(self.blend_shapes_widget)
def _create_raw_control(self):
"""创建Raw Control部分"""
# === Widget ===
widget = QtWidgets.QWidget()
# === Layout ===
layout = QtWidgets.QVBoxLayout(widget)
layout.setContentsMargins(5, 5, 5, 5)
layout.setSpacing(5)
# 标题
title_layout = QtWidgets.QHBoxLayout()
title_label = QtWidgets.QLabel("Raw Control [814/814]")
title_layout.addWidget(title_label)
layout.addLayout(title_layout)
# 搜索框
self.search_edit = QtWidgets.QLineEdit()
self.search_edit.setPlaceholderText("搜索...")
layout.addWidget(self.search_edit)
# BlendShape列表
self.blend_list = QtWidgets.QListWidget()
layout.addWidget(self.blend_list)
# 数值调节
value_layout = QtWidgets.QHBoxLayout()
self.value_spin = QtWidgets.QDoubleSpinBox()
self.value_spin.setValue(0.010)
self.value_spin.setDecimals(3)
value_layout.addWidget(self.value_spin)
layout.addLayout(value_layout)
# 过滤按钮组
filter_layout = QtWidgets.QHBoxLayout()
self.filter_buttons = []
for text in ["全部", "2", "3", "4", "5", "6"]:
btn = QtWidgets.QPushButton(text)
btn.setCheckable(True)
filter_layout.addWidget(btn)
self.filter_buttons.append(btn)
layout.addLayout(filter_layout)
return widget
def _create_blend_shapes(self):
"""创建Related Blend Shapes部分"""
# === Widget ===
widget = QtWidgets.QWidget()
# === Layout ===
layout = QtWidgets.QVBoxLayout(widget)
layout.setContentsMargins(5, 5, 5, 5)
layout.setSpacing(5)
# 标题
title_layout = QtWidgets.QHBoxLayout()
title_label = QtWidgets.QLabel("Related Blend Shapes [858/858]")
title_layout.addWidget(title_label)
layout.addLayout(title_layout)
# BlendShape列表
self.related_list = QtWidgets.QListWidget()
layout.addWidget(self.related_list)
# 数值调节
value_layout = QtWidgets.QHBoxLayout()
self.related_value_spin = QtWidgets.QDoubleSpinBox()
self.related_value_spin.setValue(0.000)
self.related_value_spin.setDecimals(3)
value_layout.addWidget(self.related_value_spin)
layout.addLayout(value_layout)
# 操作按钮组 - 第一行
op_layout1 = QtWidgets.QHBoxLayout()
op_buttons1 = [
("翻转目标", "flip.png"),
("镜像目标", "mirror.png"),
("查找翻转目标", "find_flip.png")
]
for text, icon in op_buttons1:
btn = QtWidgets.QPushButton(text)
if icon:
btn.setIcon(QtGui.QIcon(f"{config.ICONS_PATH}/{icon}"))
op_layout1.addWidget(btn)
layout.addLayout(op_layout1)
# 操作按钮组 - 第二行
op_layout2 = QtWidgets.QHBoxLayout()
op_buttons2 = [
("添加混合目标", "add.png"),
("删除混合目标", "delete.png"),
("批量混合目标", "batch.png")
]
for text, icon in op_buttons2:
btn = QtWidgets.QPushButton(text)
if icon:
btn.setIcon(QtGui.QIcon(f"{config.ICONS_PATH}/{icon}"))
op_layout2.addWidget(btn)
layout.addLayout(op_layout2)
# 功能按钮组
func_layout = QtWidgets.QHBoxLayout()
func_buttons = ["PSD", "BSE", "KEY", "MIR", "ARK", "CTR"]
for text in func_buttons:
btn = QtWidgets.QPushButton(text)
btn.setFixedWidth(40)
func_layout.addWidget(btn)
layout.addLayout(func_layout)
return widget
def _create_connections(self):
"""创建信号连接"""
# 搜索框
self.search_edit.textChanged.connect(self._filter_blend_shapes)
# 数值调节
self.value_spin.valueChanged.connect(self._update_raw_value)
self.related_value_spin.valueChanged.connect(self._update_related_value)
# 过滤按钮组
for btn in self.filter_buttons:
btn.clicked.connect(self._apply_filter)
# ================================ 事件函数 ================================
def _filter_blend_shapes(self, text):
"""过滤BlendShape列表"""
# TODO: 实现过滤逻辑
pass
def _update_raw_value(self, value):
"""更新Raw Control值"""
# TODO: 实现更新逻辑
pass
def _update_related_value(self, value):
"""更新Related Blend Shapes值"""
# TODO: 实现更新逻辑
pass
def _apply_filter(self):
"""应用过滤器"""
# TODO: 实现过滤逻辑
pass
2025-02-09 22:11:50 +08:00
if __name__ == "__main__":
pass