2025-01-14 00:17:20 +08:00
|
|
|
|
#!/usr/bin/env python
|
|
|
|
|
# -*- coding: utf-8 -*-
|
2025-02-09 22:11:50 +08:00
|
|
|
|
|
2025-02-09 23:22:48 +08:00
|
|
|
|
from PySide2 import QtCore, QtGui, QtWidgets
|
2025-02-09 22:11:50 +08:00
|
|
|
|
import maya.OpenMayaUI as omui
|
|
|
|
|
from shiboken2 import wrapInstance
|
2025-02-09 23:22:48 +08:00
|
|
|
|
from scripts import config
|
|
|
|
|
from scripts.ui import menu, toolshelf, meshes, rigging, behaviour, definition
|
2025-02-09 22:11:50 +08:00
|
|
|
|
|
|
|
|
|
class MetaFusion(QtWidgets.QMainWindow):
|
|
|
|
|
def __init__(self, parent=None):
|
|
|
|
|
super(MetaFusion, self).__init__(parent)
|
2025-02-09 23:22:48 +08:00
|
|
|
|
self._setup_ui()
|
|
|
|
|
self._create_connections()
|
|
|
|
|
self._load_style()
|
2025-02-09 22:11:50 +08:00
|
|
|
|
|
2025-02-09 23:22:48 +08:00
|
|
|
|
def _setup_ui(self):
|
|
|
|
|
"""设置UI布局"""
|
|
|
|
|
# === 设置窗口属性 ===
|
|
|
|
|
self.setWindowTitle(f"{config.TOOL_NAME} {config.TOOL_VERSION}")
|
|
|
|
|
# 设置初始大小和最小大小
|
2025-02-10 01:21:32 +08:00
|
|
|
|
self.resize(550, 700) # 初始大小
|
|
|
|
|
self.setMinimumSize(550, 700) # 最小大小限制
|
2025-02-09 23:22:48 +08:00
|
|
|
|
|
|
|
|
|
# === 创建中心部件 ===
|
|
|
|
|
self.central_widget = QtWidgets.QWidget()
|
|
|
|
|
self.setCentralWidget(self.central_widget)
|
2025-02-09 22:11:50 +08:00
|
|
|
|
|
2025-02-09 23:22:48 +08:00
|
|
|
|
# === Main Layout ===
|
|
|
|
|
self.main_layout = QtWidgets.QVBoxLayout(self.central_widget)
|
|
|
|
|
self.main_layout.setContentsMargins(0, 0, 0, 0)
|
|
|
|
|
self.main_layout.setSpacing(0)
|
2025-02-09 22:11:50 +08:00
|
|
|
|
|
2025-02-09 23:22:48 +08:00
|
|
|
|
# === 创建菜单栏 ===
|
|
|
|
|
self.menu_bar = menu.MenuBar(self)
|
|
|
|
|
self.setMenuBar(self.menu_bar)
|
2025-02-09 22:11:50 +08:00
|
|
|
|
|
2025-02-09 23:22:48 +08:00
|
|
|
|
# === 创建工具架 ===
|
2025-02-09 22:11:50 +08:00
|
|
|
|
self.tool_shelf = toolshelf.ToolShelf(self)
|
|
|
|
|
self.main_layout.addWidget(self.tool_shelf)
|
|
|
|
|
|
2025-02-09 23:22:48 +08:00
|
|
|
|
# === 创建标签页 ===
|
2025-02-09 22:11:50 +08:00
|
|
|
|
self.tab_widget = QtWidgets.QTabWidget()
|
|
|
|
|
self.main_layout.addWidget(self.tab_widget)
|
|
|
|
|
|
|
|
|
|
# 添加各个功能页面
|
2025-02-09 23:22:48 +08:00
|
|
|
|
self._create_tabs()
|
2025-02-09 22:11:50 +08:00
|
|
|
|
|
2025-02-09 23:22:48 +08:00
|
|
|
|
# === 创建状态栏 ===
|
|
|
|
|
self.status_bar = self._create_status_bar()
|
|
|
|
|
self.setStatusBar(self.status_bar)
|
2025-02-09 22:11:50 +08:00
|
|
|
|
|
2025-02-09 23:22:48 +08:00
|
|
|
|
# 设置窗口位置居中
|
|
|
|
|
self._center_window()
|
|
|
|
|
|
|
|
|
|
def _center_window(self):
|
|
|
|
|
"""将窗口居中显示"""
|
|
|
|
|
# 获取主屏幕几何信息
|
|
|
|
|
screen = QtWidgets.QApplication.primaryScreen().geometry()
|
|
|
|
|
# 计算窗口居中位置
|
|
|
|
|
x = (screen.width() - self.width()) // 2
|
|
|
|
|
y = (screen.height() - self.height()) // 2
|
|
|
|
|
# 移动窗口
|
|
|
|
|
self.move(x, y)
|
2025-02-09 22:11:50 +08:00
|
|
|
|
|
2025-02-09 23:22:48 +08:00
|
|
|
|
def _create_tabs(self):
|
|
|
|
|
"""创建标签页"""
|
|
|
|
|
# Meshes标签页
|
|
|
|
|
self.meshes_tab = meshes.MeshesTab()
|
|
|
|
|
self.tab_widget.addTab(self.meshes_tab, "模型")
|
|
|
|
|
|
|
|
|
|
# Rigging标签页
|
|
|
|
|
self.rigging_tab = rigging.RiggingTab()
|
|
|
|
|
self.tab_widget.addTab(self.rigging_tab, "绑定")
|
|
|
|
|
|
|
|
|
|
# Behaviour标签页
|
|
|
|
|
self.behaviour_tab = behaviour.BehaviourTab()
|
|
|
|
|
self.tab_widget.addTab(self.behaviour_tab, "行为")
|
|
|
|
|
|
|
|
|
|
# Definition标签页
|
|
|
|
|
self.definition_tab = definition.DefinitionTab()
|
|
|
|
|
self.tab_widget.addTab(self.definition_tab, "定义")
|
|
|
|
|
|
|
|
|
|
def _create_status_bar(self):
|
|
|
|
|
"""创建状态栏"""
|
|
|
|
|
# === Widget ===
|
|
|
|
|
status_bar = QtWidgets.QStatusBar()
|
|
|
|
|
|
|
|
|
|
# 添加版本信息
|
|
|
|
|
version_label = QtWidgets.QLabel(f"{config.TOOL_VERSION}")
|
|
|
|
|
status_bar.addPermanentWidget(version_label)
|
|
|
|
|
|
|
|
|
|
# 添加Maya版本信息
|
|
|
|
|
maya_version_label = QtWidgets.QLabel(f"Maya {config.MAYA_VERSION}")
|
|
|
|
|
status_bar.addPermanentWidget(maya_version_label)
|
|
|
|
|
|
|
|
|
|
# 添加Python版本信息
|
|
|
|
|
python_version_label = QtWidgets.QLabel(f"Python {config.PYTHON_VERSION}")
|
|
|
|
|
status_bar.addPermanentWidget(python_version_label)
|
|
|
|
|
|
|
|
|
|
return status_bar
|
|
|
|
|
|
|
|
|
|
def _load_style(self):
|
|
|
|
|
"""加载样式表"""
|
|
|
|
|
try:
|
|
|
|
|
with open(config.TOOL_STYLE_FILE, "r", encoding="utf-8") as f:
|
|
|
|
|
style = f.read()
|
|
|
|
|
self.setStyleSheet(style)
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"加载样式表失败: {str(e)}")
|
|
|
|
|
|
|
|
|
|
def _create_connections(self):
|
|
|
|
|
"""创建信号连接"""
|
|
|
|
|
# 标签页切换
|
|
|
|
|
self.tab_widget.currentChanged.connect(self._on_tab_changed)
|
|
|
|
|
|
|
|
|
|
def _on_tab_changed(self, index):
|
|
|
|
|
"""标签页切换事件"""
|
|
|
|
|
tab_name = self.tab_widget.tabText(index)
|
|
|
|
|
self.status_bar.showMessage(f"当前页面: {tab_name}")
|
|
|
|
|
|
|
|
|
|
def closeEvent(self, event):
|
|
|
|
|
"""关闭窗口事件"""
|
|
|
|
|
# TODO: 实现关闭前的保存提示等逻辑
|
|
|
|
|
event.accept()
|
2025-02-09 22:11:50 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def show():
|
|
|
|
|
"""显示主窗口"""
|
|
|
|
|
# 获取Maya主窗口
|
|
|
|
|
maya_main_window = wrapInstance(int(omui.MQtUtil.mainWindow()), QtWidgets.QWidget)
|
|
|
|
|
|
|
|
|
|
# 创建并显示插件窗口
|
|
|
|
|
global meta_fusion_window
|
|
|
|
|
meta_fusion_window = MetaFusion(parent=maya_main_window)
|
|
|
|
|
meta_fusion_window.show()
|
2025-02-09 23:22:48 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
show()
|