两种方法让 Maya 加载使用Qt Designer 所创建的ui文件

虽然我写脚本还不是很熟练但是总是在没有UI的纯代码下调试真的很烦。选择这个运行一下,再选择这个运行一下,最后按顺序选择这几个再运行一下。。。。。过了几天自己好像都看不太懂了。还是学习一下UI的写法吧。

maya创建UI可以自己纯用代码来写,也可以借助一个叫Qt Designer图形界面来创建一个ui文件供Maya加载后使用。作为我这种半吊子来说,使用图形界面就是相当友好上手快捷的事情了。Qt Designer在比较高版本的maya中是自带的,位置在maya安装目录下bin目录中的designer.exe就是了。如果打不开可以参考我上一篇文章,希望能有所帮助。如果实在打不开也可以下载一个Qt Creator使用里面的desigener也是一样的。

在创建完成一个.ui文件以后呢就需要将文件加载进入maya,在这里加载就有两种方法。

第一种是使用QUiLoder().load()直接将ui文件加载进入。

 

  1. 使用designer制作一个简单的UI,放入maya可以的读取到的脚本文件夹下。(比如我的文档下maya/script下)
  2. 加载进入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的文件形式。通过继承的方式加载进入

  1. 编译.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"))
    
    
  2. 把编译好的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了,希望能对大家有所帮助。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值