在新版本的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执行重新打开下我们开发的工具界面就又重新加载了