Maya 搭建PyCharm 插件开发环境
在新版本的maya安装目录是包含了Pymel库,路径:D:\Autodesk\Maya2019\Python\Lib\site-packages,在配置Pycharm的第三方lib的时候可以直接添加这个路径。
1.在Pycharm编辑器添加扩展工具,QtDenginer 和 生成Qtpy的pySide2_uic
1.1Qt Designers的配置
Name:QtDesiginer
Program: D:\Autodesk\Maya2019\bin\designer.exe
Arguments:$FileDir$\$FileName$
Wording directory:$ProjectFileDir$
1.2 PyUIC的配置
pyuic是Qt提供的一个吧.ui的界面文件,转成python的文件。
Name:PyUIC
Program: “C:\Program Files\Autodesk\Maya2019\bin\mayapy.exe”
Arguments:"C:\Program Files\Autodesk\Maya2019\bin\pyside2-uic" -o $FileDir$\$FileNameWithoutExtension$.py $FileDir$\$FileName$
Wording directory:$ProjectFileDir$
这里由于是Maya2019,通过mayapy来启动一个pyside2-uic 这个DLL文件来执行命令,如果有pyside2-uic.exe 就把执行程序换成pyside2-uic.exe
-o 后面接输出文件名字
$FileName$ 选择的源文件名字
ps:如果路径有空格,使用引号括起来
2.编辑一个界面
然后使用PyUIC对保存的cone.ui进行处理生成cone.py
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'cone.ui' # # Created: Mon Jul 22 12:21:47 2019 # by: pyside2-uic running on PySide2 2.0.0~alpha0 # # WARNING! All changes made in this file will be lost! from PySide2 import QtCore, QtGui, QtWidgets class Ui_ar_conePtrWindow(object): def setupUi(self, ar_conePtrWindow): ar_conePtrWindow.setObjectName("ar_conePtrWindow") ar_conePtrWindow.resize(376, 188) self.label = QtWidgets.QLabel(ar_conePtrWindow) self.label.setGeometry(QtCore.QRect(30, 30, 111, 41)) font = QtGui.QFont() font.setPointSize(15) self.label.setFont(font) self.label.setObjectName("label") self.inputRotation = QtWidgets.QLineEdit(ar_conePtrWindow) self.inputRotation.setGeometry(QtCore.QRect(140, 40, 113, 20)) self.inputRotation.setObjectName("inputRotation") self.pushButton = QtWidgets.QPushButton(ar_conePtrWindow) self.pushButton.setGeometry(QtCore.QRect(140, 130, 75, 23)) self.pushButton.setObjectName("pushButton") self.retranslateUi(ar_conePtrWindow) QtCore.QMetaObject.connectSlotsByName(ar_conePtrWindow) def retranslateUi(self, ar_conePtrWindow): ar_conePtrWindow.setWindowTitle(QtWidgets.QApplication.translate("ar_conePtrWindow", "Form", None, -1)) self.label.setText(QtWidgets.QApplication.translate("ar_conePtrWindow", "Y-Rotation", None, -1)) self.pushButton.setText(QtWidgets.QApplication.translate("ar_conePtrWindow", "Create Cone", None, -1)) |
---|
这就是生成的cone.py。相当于工具自动把界面代码生成出来了,然后只需要引入调用即可。
3.代码控制界面
#-*- coding: UTF-8 -*- import sys from PySide2.QtWidgets import * import os sys.path.append(os.path.expanduser('~/maya/scripts')) import Cone reload(Cone) class AR_QtConePtrWindow(QWidget): def __init__(self): super(AR_QtConePtrWindow, self).__init__() self.ui = Cone.Ui_ar_conePtrWindow() self.ui.setupUi(self) self.ui.pushButton.clicked.connect(self.onCreateCone) def onCreateCone(self): rotaVale = self.ui.inputRotation.text() print("Rota Value:%f" % rotaVale) if __name__ == "__main__": # app = QApplication(sys.argv) window = AR_QtConePtrWindow() window.show() # sys.exit(app.exec_()) |
---|
Qt界面的内容,可以Google查PySide2找到类的说明,如果是信号,在Python 就可以通过connect来连接一个函数,如上面的clicked就是一个信号。如果是虚函数,可以在这里直接重写。
如果Py带中文内容,加上#-*- coding: UTF-8 -*-
代码拷贝到插件目录,也就是Documents下面的Maya目录:C:\Users\Dell\Documents\maya\scripts
然后在MAYA命令窗口执行窗口那个文件的代码:
reload 很关键,自己写的代码都要用这个,否则修改的内容不能再当前状态下生效,只能退出Maya编辑器再打开来重新加载。有了reload执行重新打开下我们开发的工具界面就又重新加载了