日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Maya界面编程入门:在Maya中使用Qt

發布時間:2023/12/18 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Maya界面编程入门:在Maya中使用Qt 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

歡迎關注WX公眾號: DanggooTD查看更多文章!!!

?

我就不廢話了,先說一下用designer畫窗口然后在maya中加載的傻瓜式操作:

?

  • 先假設你用的是windows, maya2017;

  • 下載python27,地址為:

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

    安裝在默認路徑(C:\Python27)。

  • 安裝PySide。在cmd中運行以下命令:

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

  • 打開C:\Python27\Lib\site-packages\PySide\designer.exe,新建一個窗口,隨意拖點東西上去:

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

  • 打開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()

    ?

  • 完成!現在你有了第一個Qt窗口了:

  • 不用designer的方法:

  • 如果你對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的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。