#!/usr/bin/env python # -*- coding: utf-8 -*- from PySide2 import QtCore, QtGui, QtWidgets import maya.OpenMayaUI as omui from shiboken2 import wrapInstance from scripts import config from scripts.ui import menu, toolshelf, meshes, rigging, behaviour, definition class MetaFusion(QtWidgets.QMainWindow): def __init__(self, parent=None): super(MetaFusion, self).__init__(parent) self._setup_ui() self._create_connections() self._load_style() def _setup_ui(self): """设置UI布局""" # === 设置窗口属性 === self.setWindowTitle(f"{config.TOOL_NAME} {config.TOOL_VERSION}") # 设置初始大小和最小大小 self.resize(550, 700) # 初始大小 self.setMinimumSize(550, 700) # 最小大小限制 # === 创建中心部件 === self.central_widget = QtWidgets.QWidget() self.setCentralWidget(self.central_widget) # === Main Layout === self.main_layout = QtWidgets.QVBoxLayout(self.central_widget) self.main_layout.setContentsMargins(0, 0, 0, 0) self.main_layout.setSpacing(0) # === 创建菜单栏 === self.menu_bar = menu.MenuBar(self) self.setMenuBar(self.menu_bar) # === 创建工具架 === self.tool_shelf = toolshelf.ToolShelf(self) self.main_layout.addWidget(self.tool_shelf) # === 创建标签页 === self.tab_widget = QtWidgets.QTabWidget() self.main_layout.addWidget(self.tab_widget) # 添加各个功能页面 self._create_tabs() # === 创建状态栏 === self.status_bar = self._create_status_bar() self.setStatusBar(self.status_bar) # 设置窗口位置居中 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) 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() 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() if __name__ == "__main__": show()