CG業界の標準スクリプティング環境が Python+Qt でほぼ確定っぽいので、私も今後はこの環境で開発をしていくことにしました。個人的にはスクリプト言語は Ruby、GUI ツールキットは fltk が好きなんですけど、そこでわざわざマイノリティになっても仕方ないですからね。。。。
ここで問題になるのが、標準で配布されている PyQt には 64bit 版が存在しないことです。将来的には Maya にも標準で PyQt が添付されるようになるでしょうが、今のところは各自用意する必要があるようなので syoyo さんの記事を参考に自前ビルドをしてみました。
結論から言えば、時間はかかったもののアッサリと動きました。Maya 上の Python から Qt のサンプルを動かすのもバッチリです 🙂 ・・・と言いたいところですが、一つ致命的な問題があることに気づきました。
スクリプト実行中は Maya が固まる
はい、ちょっと考えれば当たり前ですねw しかし、このままでは使い物になりません。
どうしたものか。。。と悩みながらドキュメントを読んでいると、pumpThread というものを使えば解決するようです。これは Maya の devkit に含まれています(devkit/other/PyQtScripts/qt/pumpThread.py)。
pyQtScripts/userSetup.py を実行すると Maya のメニューバーに pythonScripts という項目が追加されて、サンプルを試すことができます。・・・が、これもまたきちんと動いていないようで、相変わらず Maya が固まってしまいます。
また、標準でついてくる pumpThread にはいろいろ問題があるらしく、改良版が python_inside_maya という ML の “PyQt in Maya examples” というスレッドに掲載されていました。ソースはまだ読んでいないので内容については何とも言えないものの、こちらを使用したほうがいいのかもしれません。
今のところ私がわかっているのはこれくらいです。PyQt on Maya についてはまだまだ調査を始めたばかりでわからないことだらけなので、何か情報をお持ちの方はぜひ教えてください 😀
いつも拝見していただいております。
始めまして某CG会社で働いている似非デザイナーです。
PyQTのスクリプト実行中にMayaが固まる問題はpumpThreadで大体解決できますが、
個人的にはそれ自体が落ちる原因になる場合が多いのであまり使用しません。
私のほうもMaya上でPyQtを試してみたことがあります。
色々限定されますが、そのとき個人的に見つけた回避策はPyQtスクリプトで必ず入れている
app.exec_()
を外す(コメントアウットする、入れない)ことです。
勿論PyQtを
global app
app=QtGui.Application(sys.arg)
にして作った場合のみです。
これはpumpThread無しで動きます。
この方法だとPyQtのWindowを何個も立ち上げることも可能です。
ただ、この方法がベストだとはいえないので試すときは気をつけてください。
はじめまして。
なるほど、そんな回避方法もあるんですね。とても参考になります。ありがとうございます!! 😀
pumpThread は何かと問題があるみたいですね。。。。教えて頂いた解決策をちょっと試させていただきます!!