MetaFusion/scripts/MetaFusion.py

141 lines
4.6 KiB
Python
Raw Normal View History

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()