私はMaya IndieというMayaの個人向けライセンスを使って、自宅のノートPCでちょこちょこ練習してます😊「自宅でMayaを勉強する環境がない」と困っている方の参考になればうれしいです。
👉 Maya Indieの紹介記事
こんにちは!ビーバー@ゲーム業界歴約20年 です。maya python初心者の方のために、カンタン・わかりやすい解説サイトを作っています。
maya pythonの学習情報って少ないですよね。
自分が骨を折った経験をもとに、maya python基礎を最速で習得できる10回のチュートリアル
を作ってみたので参考にしていただければ幸いです。
今回は、10回目。GUIを作り、ボタンにスクリプトを登録する方法を学びます。
>> はじめての方向けMayaPythonの勉強方法はこちら!
※当サイトで紹介する商品は、アフィリエイトプログラムを利用しています。
スクリプト例
下記のようなスクリプトを例に説明をしていきます。
import mayapy08
reload(mayapy08)
cmds.window("myTools")
cmds.rowColumnLayout( numberOfColumns=2, columnWidth=[(1, 150), (2, 150)] )
cmds.button(label="spiralCone" , command="mayapy08.spiralCone()")
cmds.text(label="spiralConeを実行します")
cmds.button()
cmds.text(label="ボタンの説明")
cmds.showWindow()
このスクリプトを実行すると、図のようなウィンドウができます。

ボタンには、9限目で作成した、mayapy08.pyモジュールの spiralCone() 関数を登録してみました。
「spiralCone」というボタンを押すと、関数が実行され、コーンがらせん状に並びます。


GUIを構成するコマンドの解説
それでは、どのようにGUIを作るのか、詳しく見ていきましょう。
GUIは下記のようなコマンドを組み合わせて作成します。
- ウィンドウを作成、表示、閉じる
- ボタンを横に並べるレイアウトを作る
- ボタンを等間隔で横に並べたレイアウトを作る
- 横にも縦にもボタンを並べるレイアウトを作る
- テキストを表示する
- ボタンクリックで関数を実行する
ウィンドウを作成、表示、閉じる操作
ウィンドウを作成、表示、閉じる操作は下記3つのコマンドで行います。
cmds.window(“ウィンドウ名”)
カラのウィンドウを作成します。表示はしないので注意!
cmds.showWindow(“ウィンドウ名”)
ウィンドウを表示します。
cmds.deleteUI(“ウィンドウ名”)
ウィンドウを閉じるコマンドです。
cmds.window()
cmds.showWindow()
cmds.deleteUI("window1")


これはわかりやすいな、
window()で作成、showWindow()で表示、deleteUI()は消すコマンドだね!


図のような「~~が固有ではありません」っていうエラーが出るときに
deleteUI(“ウィンドウ名”) を実行するといいよ。
ボタンを横に並べるレイアウトを作る
ウィンドウに何かを表示させたい場合は、レイアウトを作りましょう。
ボタンを横にならべたレイアウトを作るには、rowLayout()で横並びのレイアウトを作成し、
button()と続けることで、レイアウトの中にボタンを配置することができます。
cmds.rowLayout()
子を水平一列に配置できるレイアウトを作成します。
numberOfColumnsフラグで横にならべる子の数を指定できます。
cmds.button()
ボタンを作成します。
cmds.window("myTools")
cmds.rowLayout(numberOfColumns=3)
cmds.button()
cmds.button()
cmds.button()
cmds.showWindow()

ボタンを等間隔で横に並べたレイアウトを作る
今度は、レイアウトとボタン幅を指定して、ボタンを等間隔に並べてみましょう。
レイアウト幅はrowLayout()の、columnWidth3フラグで指定できます。
ボタン幅はbutton()の、widthで指定します。
cmds.window("myTools")
cmds.rowLayout( numberOfColumns=3, columnWidth3=(110, 110, 110))
cmds.button(width=100, label="tes01")
cmds.button(width=100, label="tes02")
cmds.button(width=100, label="tes03")
cmds.showWindow()


cmds.rowLayout( numberOfColumns=3, columnWidth3=(110, 110, 110))

columnWidth3=(110, 110, 110)は、
3つのレイアウト幅を左から順番に指定してるんだね。

横にも縦にもボタンを並べるレイアウトを作る
ボタンを縦横に並べるにはどうすればいいのでしょう?
それには、rowColumnLayout() というコマンドを使います。
numberOfColumnsというフラグで、水平方向の子の数を指定し、
columnWidthフラグでレイアウトの幅を個別に指定できます。
cmds.rowColumnLayout()
レイアウトの縦横の並びを指定することができます。
cmds.window("myTools")
cmds.rowColumnLayout( numberOfColumns=2, columnWidth=[(1, 150), (2, 150)] )
cmds.button()
cmds.button()
cmds.button()
cmds.button()
cmds.button()
cmds.showWindow()

cmds.rowColumnLayout( numberOfColumns=2, columnWidth=[(1, 150), (2, 150)] )

numberOfColumns=2 だから、水平2列にならべるレイアウトってことだね。
1列目も2列目も、幅は150に指定しているよ。
テキストを表示する
ボタンではなく、単にテキストを表示したい場合は、text()を使います。
cmds.text(“○○○○”)
テキストを作成します。
cmds.window("myTools")
cmds.rowColumnLayout( numberOfColumns=2, columnWidth=[(1, 150), (2, 150)] )
cmds.button()
cmds.text(label="ボタンの説明")
cmds.button()
cmds.text(label="ボタンの説明")
cmds.showWindow()

>> ユーザが入力できる「テキストフィールド」を入れたい方はこちら
ボタンクリックで関数を実行する
ボタンに関数を埋め込むステップは2つです。
- モジュールを読みこむ
- ボタンに関数を埋め込む
モジュールを読みこむ
モジュール化した関数をボタンに埋め込むには、あらかじめモジュールを読んでおく必要があります。
モジュール側が更新されていた場合に備えて、リロードも入れておきましょう。
ここでは、mayapy08というモジュールを読みこみます。
モジュールの読み込み
import ○○○○(モジュール名)
モジュールのリロード
reload(モジュール名)
>> モジュールの保存、呼び出しはこちらで詳しく説明しています
import mayapy08
reload(mayapy08)
cmds.window("myTools")
cmds.rowColumnLayout( numberOfColumns=2, columnWidth=[(1, 150), (2, 150)] )
cmds.button(label="spiralCone" , command="mayapy08.spiralCone()")
cmds.text(label="spiralConeを実行します")
cmds.button()
cmds.text(label="ボタンの説明")
cmds.showWindow()


モジュールを修正しながら何度も実行する場合は、reloadを入れておくと便利だね。

reload()はpython2系の書き方で、
python3以降では、書式が異なるから注意してね。
ボタンに関数を埋め込む
続いて、ボタンに関数を埋め込みます。
関数の埋め込みは、button()の commandフラグで行います。
cmds.button( command = “モジュール名.関数名” )
ボタンクリック時に実行する関数を指定します。
cmds.button(label="spiralCone" , command="mayapy08.spiralCone()")

ちなみに、モジュール化していない普通の関数の埋め込みもできるよ。
例えば、nurbsサークルを作成するコマンドをボタンに仕込むとしたら、、



わあ!サークルができたよ!
いろんな機能を持たせたボタンを作れるね!

最後に、もう一度スクリプトをおさらいします。
import mayapy08
reload(mayapy08)
cmds.window("myTools")
cmds.rowColumnLayout( numberOfColumns=2, columnWidth=[(1, 150), (2, 150)] )
cmds.button(label="spiralCone" , command="mayapy08.spiralCone()")
cmds.text(label="spiralConeを実行します")
cmds.button()
cmds.text(label="ボタンの説明")
cmds.showWindow()
importでモジュールを読みこみ、
window()でウィンドウを作成し、rowColumnLayout()でレイアウトを指定、
レイアウトの上に button() と text() でボタンとテキストを配置しました。
ボタンに関数を埋め込むのは、button()のcommandフラグで関数を指定します。
スクリプト実行でできたウィンドウはこちら↓

ボタンには、9限目で作成した、mayapy08.pyモジュールの spiralCone() 関数が登録されています。
「spiralCone」のボタンクリックで、関数が実行されます。


まとめ
今回学習した内容のポイントをまとめます。
- window()、showWindow()、deleteUI()コマンドで
ウィンドウの生成、表示、削除を行う - ウィンドウにボタンを表示するには、レイアウトを作成する
rowLayout()、rowColumnLayout()コマンドなど - button()コマンドでボタンを作成
- text()コマンドでテキストを作成
- importで読みこんだモジュールは、reload()でリロードを行うことができる
- button()コマンドの commandフラグでボタンにスクリプトを埋め込む

GUIを作ったら、スクリプトをシェルフに登録しておこう!
すぐに呼び出せて便利だよ。
これでmaya python10回シリーズが完結しました!
ここまでお読みいただいた皆さん、本当にありがとうございます。
以降は、maya pythonのいろんなtipsを紹介していこうと思います。
引き続き読んでいただけると幸いです。
maya pythonでGUIを作る方法をもっと知りたい方はこちら。
cmdsで作る方法・PySideの紹介・PySideのかんたんなチュートリアルをまとめています。
PySideを使うときに必要になる、「クラス」についても徹底解説!
😊 MayaでPythonを学びたい方へ
「ツールを作ってみたいけど、何から始めたらいいんだろう?」そんな方のために、超初心者向けのチュートリアル全10回をまとめました👇
https://kimstation.com/maya-python-summary/
こんなことが、最短で身につきます👇
- Pythonの知識ゼロから始められる
- シンプルなUIつきのツールを自分で書けるようになる
- Mayaコマンドの基礎や、ツールづくりの基本がわかる
「ツールづくりに挑戦したい」という方に向けて、必要最低限の知識だけをしぼってやさしくまとめてます😊ツールを自分で作れるようになると、すごく楽しいですよ~!
オススメの本。pythonが楽しく学べます☆

復習はこちら↓
コメント