[PySide] MayaShelfにPySideのオブジェクトを配置する

最近AmazonKindleで販売開始された Practical Maya Programming with Python という本の中に、
「ShelfもQtで動いてるから自由にオブジェクトつっこめるよー、けど諸々あるから詳しく書かないよー」的な事が書いてあったので、やり方を調べてみました。

ポイントが3つほどあります。

1 MayaのShelfレイアウトのトップ名は MelGlobals()[‘gShelfTopLevel’]
で取得する
2 shibokenを利用して(MayaでPySideを使うときの流用)でWidgetObjectを取得する
3 Widget.layout() で、ボタンを配置するLayoutを取得する
以上。

Layoutが取得できたあとは、今までのPySideと同じように、Widgetをがしがし乗っけることが出来ます。
使うときも、普通のUIに配置したWidgetと同じように使えるようです。

ShelfQt

上のコマンドでボタンやらコンボボックスやらラインエディットやらを突っ込んでみたらこうなります。
ものすごい違和感….

注意点は、動くものの shelf.mel : Object ‘0’ not found. と盛大にErrorで怒られます。
この辺がなにやら「板挟みでどーのこーの」という事なんでしょうか。
このあたりは、Autodeskのオフィシャルな事じゃないのでなかなか微妙なところっぽいです。

試しておいて言うのもアレですが、コレをいったいどうやって使うんだよwwwww感は半端ないです。
まぁどこかで使うこともあるでしょう…たぶん…

追記。
どうやら、このスクリプトでShelfにオブジェクトを追加しても、Shelf_melと競合して上書き?というか初期化されてしまうようです。
なので、起動時にボタンを入れておくとかしたい場合は userSetup.py or mel に
Shelf作成コマンドを挟んでおく必要があります。
ついでに、すでにShelfがある場合、前のコマンドだと上手くいかなかったので
シェルフがある場合は、今のシェルフを使うようにコードを修正。

shelfLayoutオブジェクトをどうやって取得するんだろ?と思ったら、 e=True でのReturnがshelfLayoutオブジェクトのようです。

思いつく使い方だと、共同作業する時の共有Shelf作成をコレでやるとか良いのかもしれないとかちょろっと考えたけどどうだろう?

コメントを残す

メールアドレスが公開されることはありません。


*