Maya 2011 可能是有史以來,對於開發人員最最有善的一次改版了:整個 GUI 使用 Nokia Qt 重寫一遍。Maya 過去的版本發表中,影響程度足以和 2011 相提並論的,我想只有 Maya 8.5 推出時提供的 Python binding ,以及隨後由 Chad Dombrova 個人領軍執行的 pymel open source project 可以匹敵 。事實上我覺得,Maya 2011 以 Qt 重寫這件事,不止是用哪個 GUI framework 的差別而已,包括整個 GUI 的能力,與系統的整合,使用第三方程式庫的能力…等,差別遠比想像中的大很多。
所以當你拿到一個已經安裝好 Maya 2011 的機器時,就程式開發的角度來看的話,裏頭提供的環境應該就會有 Maya SDK + Python + pymel,然後應該也會有 Qt 的開發環境。然後既然有 Python 又有 Qt,那也應該可以使用 PyQt4 的吧? 似乎應該就是如此,但又有點不太一樣。一來,Maya 提供的 Qt 函式庫(.so or .dll)與 Nokia Qt 官方提供的有一些差異,甚至是有不全的地方;二來,Maya 並沒有提供 PyQt4! 事實上,Maya 要把 PyQt4 包入比你想像中的,都要來得複雜一些。在這邊分享一下 Maya 2011 + PyQt4 的作法與過程,雖然已經不是什麼新聞了 ;p
測試環境:
- Ubuntu Linux 64bit 8.04 與 10.04 都測試過。
- Maya 2011 64bit
- gcc/g++ 4.x
補齊 Maya 2011 不全的 Qt
Maya 2011 自帶的 Qt 版本為 4.5.3,在 Windows 下是使用 Visual Studio 2008 compile 而成,在 Linux 下的話,是 g++ 4.1。只提供 .so 或是 .dll,並沒有相對應的 .h 供編譯 PyQt4 使用,同時,自帶的 Qt 也沒有包含全部的 Qt modules。所以首要的任務,是準備一份堪用的 Qt 4.5.3 出來。因為我們的工作環境是 Linux,不想自行從無到有 compile Qt4 的作法,就是直接去抓 Nokia 官方放出來的。這點就有趣了,如果你真的認真地連到 Qt 官網,你會發現你找不到 Qt 4.5.3 可以下載的聯結 ! 這真的是糟透了,怎麼 Nokia 可以這麼不親切,至少要多留一些線索供需要不同版本的人抓呀? 至少從既有的使用者角度來看,不見得會要用到最新一版的,很多時候更需要的是某個合適的舊版本。
直接 google 下去,可以看到一篇 Qt 4.5.3 發表的聲明 。裏頭的內容不太重要,而且也沒有任何可以讓你直接下載的地方。但是呢,只要你發揮 CSI 電影裏頭主角們的精神,就還是多少可以發現點東西的,至少,你發現到 4.5.3 是在 2009/10/01 發表的! 可以連到 Nokia Qt FTP 裏頭 Qt SDK 的目錄裏 ,然後依時間來下載檔案,不就得了! 我使用的是供 Linux 64 用的 04.1 。先讓這個 bin 檔帶有執行的權限,然後一路執行下去,選好你想它安裝的目的位置就行了。對了,提醒一下,不要覆蓋掉系統自帶的 Qt 即可。這邊我假設安裝的目徑為 /data/qtsdk/
chmod a+x qt-sdk-linux-x86_64-opensource-2009.04.1.bin
./qt-sdk-linux-x86_64-opensource-2009.04.1.bin
安裝 SIP
這裏得稍為介紹一下 PyQt 優秀的地方了。PyQt 本身是供 Python 用的 module,一個把使用 C/C++ 寫成的 Qt libraries 轉成 Python 可以用的形式。PyQt 的作者使用的方式,是使用一套自動的機制,根據 Qt 的程式碼,自動地產生 Python module wrapper 的程式碼來。是以 PyQt 本身,其實也是使用 C/C++ 寫的。這個「自動機制」,就是透過 SIP 完成的。所以我們也得安裝 SIP。
自 SIP 官方下載 最新一版後,執行如下的 make 程序,最後一步安裝時,會把 SIP module 給安裝進 Maya 2011 裏頭,並不會動到系統裏的。
tar xvzf sip-4.ooxx.tar.gz # 根據下載下來的檔案名稱,自行更改 ooxx
cd sip-ooxx
/usr/autodesk/maya2011‐x64/bin/mayapy configure.py
make
sudo make install # 安裝進 Maya 2011 裏頭 /usr/autodesk/maya2011‐x64/lib/python2.6/site‐packages/
安裝 PyQt
重點來了。一樣先去 PyQt 下載最新版的下來,然後依下列步驟行事即可:
tar xvzf PyQt-ooxx.tar.gz # 根據下載下來的檔案名稱,自行更改 ooxx
cd PyQt-ooxx
/usr/autodesk/maya2011‐x64/bin/mayapy configure.py ‐q /data/qtsdk/bin/qmake
make
sudo make install
大功告成
下圖是把原來獨自在外的 PyQt 程式,稍為修改了一下,拿掉 QApplication 部分的程式碼(因為 Maya 本身就已經有提供了),跑出來的結果。紅色框選出來的部分就是了。
