Tuesday, September 14, 2010

Maya + PyQt = ?

下載安裝下載安裝.... 最近感覺一直在做這樣的動作 Orz....

要使用 Maya Python 來使用 Qt 所提供的介面,主要分為二步,第一步是安裝 Qt (http://qt.nokia.com/), 由於 Maya 文件所提到的 Qt 版本是比較舊的,我先試試看 Qt 2010 四月的版本,結果失敗 lol,dll 版本跟 Maya 所用的對不起來,到 Qt 的 FTP 站只看到一連串按日期編名
的 Qt (2009.01, 2009.04 等),正在煩惱時,找到了 ( http://www.scarpa.name/2010/04/07/maya-2011-pyqt4/ ) 救了我一命,再來是安裝 PyQt (http://www.riverbankcomputing.co.uk/news),安裝完成後,執行 PyQt Examples and Demos 來測試 PyQt 是否有正常運作,如果看到 demo window 就代表 PyQt 有正確的安裝完成 ,切換頁面時有ㄉㄨㄞㄉㄨㄞ的感覺,看起來還蠻不錯的。

接 下來就是重頭戲了,到底能不能從 Maya 中開啟 Qt 的 ui 呢!!? 不行!! Orz.. 當要 import PyQt4的 module 時,會出現 dll 的錯誤訊息,猜想是不行用預先 built 好的 PyQt4,但還好這世界上好人太多了(在此又不得不感恩一下) ,這位 Nathan 的 blog( http://nathanhorne.com/?p=229 ) 上有專為 Maya 2011 built好的 PyQt4可下載!!! 天啊,真是快哭了,二話不說,馬上試試看,果然沒再出現錯誤訊息,試了一個部落格中提供的範例,如下
import maya.OpenMayaUI as mui
import PyQt4.QtCore as QtCore
import PyQt4.QtGui as QtGui
import sip
def getMayaWindow():
ptr = mui.MQtUtil.mainWindow()
return sip.wrapinstance(long(ptr), QtCore.QObject)
class MayaSubWindow(QtGui.QMainWindow):
def __init__(self, parent=getMayaWindow()):
QtGui.QMainWindow.__init__(self,parent)
myWindow = MayaSubWindow()
myWindow.show()

又是另一個另人感動的時刻~~

總 結一下,要在 Maya 中使用 Qt ,其實有三種方法,第一種是從 Maya API 裡去實作,在 devkit 裡的 qtform 有完整的程式碼,但目前看起來還不是很親民,幾個原因,只要有更動到 UI部份,整個 plug-in 都需重新 compile,需透過 qmake 來 build,修正上不是很容易,目前看起來開發團隊也還在開發中。
第二種是用 Qt Designer 來製作 UI, 然後在 script 中使用 loadUI,Maya 會自動產生相對應的 script, 例如 input field 會對應到 text field,labels 會對應到 text 的 command,我試用過,其實還蠻方便的,但有一個地方讓我比較困擾的就是目前我還看不到比較完整的文件說明那一個 Qt中的元件對應到 Maya UI,讓我覺得如果要做一個比較複雜的介面時綁手綁腳的,不過 "The Area"中有一個影片 ( http://area.autodesk.com/blogs/stevenr/maya_2011_highlight_qt_user_interface ) 讓我覺得這才是 Maya 和 Qt 結合的正統之道? 由於我才剛接觸這一部份,目前還沒辦法下結論,只好讓時間來證明一切。
最 後一個就是使用 PyQt了,我在Maya 的目錄中也有找到一些殘缺的文件提到這個作法,為什麼是殘缺的呢? 文件名是 PyQt4 in Maya2008! 2011版裡為什麼會有 for 2008 的文件呢,真是猜不透 lol! 但不管是那一種,Maya 2011 正式使用 Qt 來當作介面開發的選擇對我們來說實在是愈來愈方便了,看看 Qt Designer 再想想之前要用 MEL 寫一個大一點的 UI,只能說苦力啊!!!

1 comment:

sTonE田 said...

請問,我是安裝http://www.highend3d.com/downloads/graph-editor-redux--3/bugs/450
這個插件,但是會出現# Error: ImportError: No module named PyQt4 #
這一段問題,是因為maya2011沒有安裝 PyQt4嗎?
麻煩大大幫忙,急!!謝謝