こんにちは!ビーバー@ゲーム業界歴約20年 です。maya python初心者の方のために、カンタン・わかりやすい解説サイトを作っています。
maya pythonの学習情報って少ないですよね。
自分が骨を折った経験をもとに、maya python基礎を最速で習得できる10回のチュートリアル
を作ってみたので参考にしていただければ幸いです。
今回は、10回目。GUIを作り、ボタンにスクリプトを登録する方法を学びます。
※当サイトで紹介する商品は、アフィリエイトプログラムを利用しています。
スクリプト例
下記のようなスクリプトを例に説明をしていきます。
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」のボタンクリックで、関数が実行されます。
まとめ
今回学習した内容のポイントをまとめます。
GUIを作ったら、スクリプトをシェルフに登録しておこう!
すぐに呼び出せて便利だよ。
これでmaya python10回シリーズが完結しました!
ここまでお読みいただいた皆さん、本当にありがとうございます。
以降は、maya pythonのいろんなtipsを紹介していこうと思います。
引き続き読んでいただけると幸いです。
オススメの本。pythonが楽しく学べます☆
復習はこちら↓
コメント