在 Maya 2011 下,準備好 PyQt4 的開發環境

Feb 27 2011

animationpython

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 本身就已經有提供了),跑出來的結果。紅色框選出來的部分就是了。

參考資料

comments powered by Disqus