兩種方法讓 Maya 載入使用Qt Designer 所建立的ui檔案
阿新 • • 發佈:2018-12-16
雖然我寫指令碼還不是很熟練但是總是在沒有UI的純程式碼下除錯真的很煩。選擇這個執行一下,再選擇這個執行一下,最後按順序選擇這幾個再執行一下。。。。。過了幾天自己好像都看不太懂了。還是學習一下UI的寫法吧。
maya建立UI可以自己純用程式碼來寫,也可以藉助一個叫Qt Designer圖形介面來建立一個ui檔案供Maya載入後使用。作為我這種半吊子來說,使用圖形介面就是相當友好上手快捷的事情了。Qt Designer在比較高版本的maya中是自帶的,位置在maya安裝目錄下bin目錄中的designer.exe就是了。如果打不開可以參考我上一篇文章,希望能有所幫助。如果實在打不開也可以下載一個Qt Creator使用裡面的desigener也是一樣的。
在建立完成一個.ui檔案以後呢就需要將檔案載入進入maya,在這裡載入就有兩種方法。
第一種是使用QUiLoder().load()直接將ui檔案載入進入。
- 使用designer製作一個簡單的UI,放入maya可以的讀取到的指令碼資料夾下。(比如我的文件下maya/script下)
- 載入進入maya
#-*-coding:utf-8-*- from maya import cmds from maya import mel from maya import OpenMayaUI as omui from PySide2.QtCore import * from PySide2.QtGui import * from PySide2.QtWidgets import * from PySide2.QtUiTools import * #如果不載入QtUiTools就不能使用QUiLoader() # from Qt import QtCore, QtGui, QtWidgets, QtUiTools from shiboken2 import wrapInstance import os.path mayaMainWindowPtr = omui.MQtUtil.mainWindow() mayaMainWindow = wrapInstance(long(mayaMainWindowPtr), QWidget) #獲得Maya主視窗 class CreateUI(QWidget): def __init__(self, *args, **kwargs): super(CreateUI, self).__init__(*args, **kwargs) self.setParent(mayaMainWindow)#將新視窗設定為maya的子級 self.setWindowFlags(Qt.Window) self.initUI() def initUI(self): loader = QUiLoader() # currentDir = os.path.dirname(__file__)#如果是import到maya中就可以的使用方法獲得路徑 currentDir = 'C:\Users\Work20180330\Documents\maya\scripts' file = QFile(currentDir + "/MyFirstQt.ui")#這個方法要使用絕對路徑 file.open(QFile.ReadOnly) file.open self.ui = loader.load(file, parentWidget=self)#初始化 file.close() self.ui.btnPrint.clicked.connect(self.Print) def Print(self): nText = self.ui.printText.text() print nText self.ui.printText.clear() def main(): ui = CreateUI() ui.show() print 'run MyFirstQt' return ui if __name__ == '__main__': main()
第二種方法就是將製作的.ui檔案通過pyuic5編譯成.py的檔案形式。通過繼承的方式載入進入
- 編譯.ui檔案時,先開啟命令提示符,,輸入命令pyuic5 (ui檔案的絕對路徑) –o (輸出py檔案的絕對路徑)並執行(如果使用的是pyqt4的話,前面輸入的就應當是pyuic4),執行完成後會看到一個python指令碼檔案。
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'C:\Users\Work20180330\Documents\maya\scripts\MyFirstQt.ui' # # Created by: PyQt5 UI code generator 5.11.2 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MyFirstQt(object): def setupUi(self, MyFirstQt): MyFirstQt.setObjectName("MyFirstQt") MyFirstQt.resize(200, 200) self.printText = QtWidgets.QLineEdit(MyFirstQt) self.printText.setGeometry(QtCore.QRect(30, 20, 141, 20)) self.printText.setObjectName("printText") self.btnPrint = QtWidgets.QPushButton(MyFirstQt) self.btnPrint.setGeometry(QtCore.QRect(60, 80, 75, 23)) self.btnPrint.setObjectName("btnPrint") self.retranslateUi(MyFirstQt) QtCore.QMetaObject.connectSlotsByName(MyFirstQt) def retranslateUi(self, MyFirstQt): _translate = QtCore.QCoreApplication.translate MyFirstQt.setWindowTitle(_translate("MyFirstQt", "Form")) self.btnPrint.setText(_translate("MyFirstQt", "Print"))
- 把編譯好的py檔案放入maya可以的讀取到的指令碼資料夾下,使用impor匯入編譯好的檔案。新建類繼承UI的類。
#-*-coding:utf-8-*- from maya import OpenMayaUI as omui from PySide2.QtCore import * from PySide2.QtGui import * from PySide2.QtWidgets import * from shiboken2 import wrapInstance import MyFirstQtWindow #載入編譯成Py的.ui檔案 mayaMainWindowPtr = omui.MQtUtil.mainWindow() mayaMainWindow = wrapInstance(long(mayaMainWindowPtr), QWidget)#獲得Maya主視窗 class MainWindow(QMainWindow,MyFirstQtWindow.Ui_MyFirstQt):#繼承編譯好的.py類 def __init__(self,*args, **kwargs): super(MainWindow, self).__init__(*args, **kwargs) self.setParent(mayaMainWindow)#將新視窗設定為maya的子級 self.setWindowFlags(Qt.Window) self.setupUi(self)#執行父類初始化方法 self.connectSignals() def connectSignals(self): self.btnPrint.clicked.connect(self.Print) def Print(self): nText = self.printText.text() print nText self.printText.clear() def main(): ui = MainWindow() ui.show() print 'run MyFirstQtNext' return ui if __name__ == '__main__': main()
通過上述兩種方法就可以將designer製作的ui檔案匯入maya了,希望能對大家有所幫助。