欢迎关注WX公众号: DanggooTD查看更多文章!!!

我就不废话了,先说一下用designer画窗口然后在maya中加载的傻瓜式操作:

  1. 先假设你用的是windows, maya2017;

  2. 下载python27,地址为:

    https://www.python.org/ftp/python/2.7/python-2.7.amd64.msi

    安装在默认路径(C:\Python27)。

  3. 安装PySide。在cmd中运行以下命令:

    C:\Python27\Scripts\pip.exe install PySide

  4. 打开C:\Python27\Lib\site-packages\PySide\designer.exe,新建一个窗口,随意拖点东西上去:

  5. 保存到ui文件:D:\test.ui

  6. 打开maya,运行以下脚本(直接复制进maya运行的话可能换行会报语法错误,可以把空白的行删除后再运行):

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # author: Dango Wang
    # time : 2019/3/19
    import xml.etree.ElementTree as xml
    from cStringIO import StringIO
    import maya.OpenMayaUI as mui
    from shiboken2 import wrapInstance
    import pyside2uic as uic
    from PySide2 import QtWidgets
    # 此行删除
    def loadUiType(uiFile): # 用来动态地将ui文件转为py文件parsed = xml.parse(uiFile)widget_class = parsed.find('widget').get('class')form_class = parsed.find('class').textwith open(uiFile, 'r') as f:o = StringIO()frame = {}uic.compileUi(f, o, indent=0)pyc = compile(o.getvalue(), '<string>', 'exec')exec pyc in frame# Fetch the base_class and form class based on their type in the xml from designerform_class = frame['Ui_%s' % form_class]base_class = getattr(QtWidgets, widget_class)return form_class, base_class
    # 此行删除
    def getMayaWindow(): #获取maya主窗口main_window_ptr = mui.MQtUtil.mainWindow()return wrapInstance(long(main_window_ptr), QtWidgets.QWidget)
    # 此行删除
    form_class, base_class = loadUiType('D:/test.ui') # 动态加载ui文件
    # 此行删除
    class TestWindow(base_class, form_class): # base为窗口类型(等价于QtWidgets.QDialog),form为自己写的界面def __init__(self):super(TestWindow, self).__init__(parent=getMayaWindow())self.setupUi(self)
    # 此行删除
    test_w = TestWindow()
    test_w.show()
  7. 完成!现在你有了第一个Qt窗口了:

不用designer的方法:

  1. 如果你对qt很熟悉,大可以直接在maya里用pyside写窗口(就像很多人用mel写过窗口一样)。通过下面的脚本,你也可以在maya里得到相同的窗口(注意删掉空白行,否则会出语法错误):

    !/usr/bin/env python
    # -*- coding: utf-8 -*-
    # author: Dango Wang
    # time : 2019/3/19
    ​
    from PySide2 import QtCore, QtWidgets
    import maya.OpenMayaUI as mui
    from shiboken2 import wrapInstance
    ​
    def getMayaWindow():main_window_ptr = mui.MQtUtil.mainWindow()return wrapInstance(long(main_window_ptr), QtWidgets.QWidget)
    ​
    class TestWindow(QtWidgets.QDialog):def __init__(self):super(TestWindow, self).__init__(parent=getMayaWindow())self.setupUi(self)def setupUi(self, Dialog):Dialog.setObjectName("Dialog")Dialog.resize(429, 293)self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)self.buttonBox.setGeometry(QtCore.QRect(30, 240, 341, 32))self.buttonBox.setOrientation(QtCore.Qt.Horizontal)self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)self.buttonBox.setObjectName("buttonBox")self.label = QtWidgets.QLabel(Dialog)self.label.setGeometry(QtCore.QRect(160, 70, 191, 81))self.label.setObjectName("label")
    ​self.retranslateUi(Dialog)QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("accepted()"), Dialog.accept)QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("rejected()"), Dialog.reject)QtCore.QMetaObject.connectSlotsByName(Dialog)
    ​def retranslateUi(self, Dialog):Dialog.setWindowTitle(QtWidgets.QApplication.translate("Dialog", "Dialog", None))self.label.setText(QtWidgets.QApplication.translate("Dialog", "Hello,QT!!", None))
    ​
    ​
    window_ = TestWindow()
    window_.show()

    得到的窗口与上面完全一样。

    那这两种方式有什么区别呢?显然,直接用designer画更方便更快!写过mel窗口的同学们都知道,写一个插件,可能写界面就要耗费大部分的时间,而如果能快速在designer中画出窗口然后在maya中动态加载,那花在界面上的时间将大大减少!如果你喜欢写个人小工具,只需要按照第一种方案,就可以从写界面的坑中脱离!恭喜你!

    但是也不要高兴地太早。如果完全依赖designer,将导致对qt的知识非常陌生。建议初学者在使用designer的同时,多尝试手写qt窗口。而且,你也可以通过pyside-uic.exe来将.ui文件转成py文件,在cmd中运行如下:

    C:\Python27\Scripts\pyside-uic.exe -o D:\test.py D:\test.ui

    运行完你就会发现D盘多了个D:\test.py,该文件就是由ui文件生成的py文件。打开它,你就可以了解窗口的实现细节。

    Ps:

    注意上面脚本中的PySide2.如果你用的是maya2016之前的版本(>maya2011),那需要换成PySide。官方给的解决方案是这样的:

    try:from shiboken2 import wrapInstanceimport pyside2uic as uicfrom PySide2 import QtWidgets, QtCore
    except ImportError:from shiboken import wrapInstancefrom PySide import QtGui as QtWidgetsfrom PySide import QtCoreimport pysideuic as uic

    至于脚本中的更多细节,如果你感兴趣,请再接再厉,好好理解吧!!

    或者你可以加我微信,交流交流?(小声说:snoopy322~)

Maya界面编程入门:在Maya中使用Qt相关推荐

  1. python可视化窗口编程-Python可视化界面编程入门

    Python可视化界面编程入门具体实现代码如所示: (1)普通可视化界面编程代码入门: import sys from PyQt5.QtWidgets import QWidget,QApplicat ...

  2. Qt图形界面编程入门(4)

    构造函数和析构函数 构造函数是一个与类同名的特殊的公有成员函数. 创建类对象时构造函数会被调用,且只调用一次/ 构造函数无返回类型. ·  默认构造函数格式: 类名(){.......} Accoun ...

  3. Python可视化界面编程入门

    Python可视化界面编程入门具体实现代码如所示: (1)普通可视化界面编程代码入门: import sys from PyQt5.QtWidgets import QWidget,QApplicat ...

  4. python如何进入编程界面_Python可视化界面编程入门

    Python可视化界面编程入门具体实现代码如所示: (1)普通可视化界面编程代码入门: import sys from PyQt5.QtWidgets import QWidget,QApplicat ...

  5. 《Qt图形界面编程入门》课后习题全解

    代码地址 https://github.com/duganlx/QT 说明 以下答案并非来自官方,而是本人自己实现的,若有啥问题,欢迎讨论(^-^) 所基于的书籍为<Qt图形界面编程入门> ...

  6. python编程界面-Python可视化界面编程入门

    Python可视化界面编程入门具体实现代码如所示: (1)普通可视化界面编程代码入门: import sys from PyQt5.QtWidgets import QWidget,QApplicat ...

  7. Python界面编程第八课:Pyside2 (Qt For Python)打开关于窗口

    先上代码: from PySide2.QtWidgets import QApplication, QWidget, QMessageBox, QPushButton import sys from ...

  8. Python界面编程第十三课:Pyside2 (Qt For Python)GridLayout网格布局

    GridLayout 是什么? QGridLayout 是控制网格布局的类. QGridLayout 会占据它的可用空间(通过父布局或parentWidget(),将其划分为行和列,并将其管理的每个控 ...

  9. Python界面编程第七课:Pyside2 (Qt For Python)窗口居中

    先上代码: from PySide2.QtWidgets import QApplication, QWidget, QDesktopWidget import sys from PySide2.Qt ...

  10. Python界面编程第二十一课:Pyside2 (Qt For Python)打印预览QTextEdit内容

    Pyside2 的QPrintSupport类中的QPrinter 和 QPrintPreviewDialog支持打印功能. 先看完整代码: from PySide2.QtWidgets import ...

最新文章

  1. YOLOv4来了,大型调优现场,速度和准确率俱佳
  2. SSE-CMM5个级别划分概述
  3. [官版翻译]OpenStack centos版安装(三)
  4. ubuntu开机出现:system program problem detected
  5. Asp.net MVC开发RDLC报表
  6. C# TeeChart的一些用法
  7. 撕掉伪善——用人话解释马云的996两次发言
  8. WebSocket客户端断开连接后,服务器端的处理机制
  9. java基础1之java语言基础1
  10. MySQL管理利器 MySQL Utilities---mysqlreplicate
  11. android 信鸽 自动重启,Android简单集成信鸽推送
  12. SDKMAN - 一个用于轻松管理多个软件开发工具包的CLI工具
  13. Java基础:继承的综合案例 —— 群主发普通红包
  14. 【转参考】MySQL利用frm和ibd文件进行数据恢复
  15. C语言求100以内素数
  16. python 声音强度检测_python – 从声音文件中检测频率
  17. win10计算机升级系统,win10系统升级更新方法
  18. 空间几何变换知识点——摘自《机器视觉研究与发展》赵彭
  19. [内附完整源码和文档] 基于JSP网上招聘系统的设计与实现
  20. 不同手机类型该如何更换手机IP

热门文章

  1. hdu 4747(区间更新)
  2. 计算机打开显示服务器无法运行,电脑中打开WMP播放器提示服务器运行失败如何解决...
  3. [canvas] 万有引力
  4. python多种方法压缩图片,opencv、PIL、tinypng、pngquant压缩图片
  5. 【PyTorch】6.1 正则化之weight_decay
  6. h2o java_h2o steam
  7. 数据表与简单java类映射(角色权限)
  8. 12 Best Custom ROMs for Android You Can Install
  9. android开发apk捆绑,Android 下 APK 捆绑器的实现
  10. 脸上为什么会长黄褐斑?