【maya python10限目】GUIから自作スクリプトを実行

mayapy10 GUI作成
過去セミナー再配信のお知らせ

過去2回のセミナーが期間限定でアンコール配信中です!
「MayaPython習得に苦しんだ過去の自分に教えてあげたい。。」調べてもわからなかったこと、教えて欲しかったことを、とことん詰め込みました。初心者の方はぜひご覧ください!

ツール作成の全体フローを最短距離で体験できます。スクリプト未経験の方におすすめ!
https://tutorials.cgworld.jp/set/2050

Mayaのオペレーションの自動化について徹底解説。様々な操作を自動化できるようになります
https://tutorials.cgworld.jp/set/2041

こんにちは!ビーバー@ゲーム業界歴約20年 です。maya python初心者の方のために、カンタン・わかりやすい解説サイトを作っています。

maya pythonの学習情報って少ないですよね。
自分が骨を折った経験をもとに、maya python基礎を最速で習得できる10回のチュートリアル
を作ってみたので参考にしていただければ幸いです。

今回は、10回目。GUIを作り、ボタンにスクリプトを登録する方法を学びます。

このチュートリアルでわかること
  • ウィンドウ成、ボタン作成などのコマンドを組み合わせてGUIを作る方法
  • cmds.window, button, Layoutなどのコマンドの使い方
  • ボタンにスクリプトを登録して実行する方法

>> GUI作成についてもっと詳しく知りたい方はこちら

>> Pythonの勉強方法を知りたい方はこちらをどうぞ

※当サイトで紹介する商品は、アフィリエイトプログラムを利用しています。

スクリプト例

下記のようなスクリプトを例に説明をしていきます。

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」というボタンを押すと、関数が実行され、コーンがらせん状に並びます。

mayapy09_01
スクリプト実行用の専用シーン
mayapy09_02
spiralCone()の実行結果

GUIを構成するコマンドの解説

それでは、どのようにGUIを作るのか、詳しく見ていきましょう。
GUIは下記のようなコマンドを組み合わせて作成します。

  1. ウィンドウを作成、表示、閉じる
  2. ボタンを横に並べるレイアウトを作る
  3. ボタンを等間隔で横に並べたレイアウトを作る
  4. 横にも縦にもボタンを並べるレイアウトを作る
  5. テキストを表示する
  6. ボタンクリックで関数を実行する

ウィンドウを作成、表示、閉じる操作

ウィンドウを作成、表示、閉じる操作は下記3つのコマンドで行います。

cmds.window(“ウィンドウ名”)
カラのウィンドウを作成します。表示はしないので注意!

cmds.showWindow(“ウィンドウ名”)
ウィンドウを表示します。

cmds.deleteUI(“ウィンドウ名”)
ウィンドウを閉じるコマンドです。

cmds.window()
cmds.showWindow()

cmds.deleteUI("window1")
mayapy10_02
ウィンドウを作成、表示したところ
ピヨちゃん
ピヨちゃん

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

よくあるエラー
ウィンドウを作成しても表示をしていない場合、
「見えてはいないが存在する」ため、
同名のウィンドウを作成しようとするとエラーが出てしまいます。
こんな時は 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を入れておくと便利だね。

ハムちゃん
ハムちゃん

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」のボタンクリックで、関数が実行されます。

mayapy09_01
スクリプト実行用の専用シーン
mayapy09_02
spiralCone()の実行結果

まとめ

今回学習した内容のポイントをまとめます。

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

GUIを作ったら、スクリプトをシェルフに登録しておこう!

すぐに呼び出せて便利だよ。

これでmaya python10回シリーズが完結しました!
ここまでお読みいただいた皆さん、本当にありがとうございます。
以降は、maya pythonのいろんなtipsを紹介していこうと思います。
引き続き読んでいただけると幸いです。

maya pythonでGUIを作ろう!

maya pythonでGUIを作る方法をもっと知りたい方はこちら。

cmdsで作る方法・PySideの紹介・PySideのかんたんなチュートリアルをまとめています。
PySideを使うときに必要になる、「クラス」についても徹底解説!

はじめてpython学習するなら!

はじめてプログラミングを勉強するとき、エラーはつきものですよね。
何時間もスクリプトが動かないこともしばしば。。
そんな時、くわしい人に教えてもらいたい、と思うことはありませんか?

侍テラコヤは、はじめてpythonを学習する方にピッタリのサービスです。
サブスク型オンラインスクールで、月¥2980~の良心的なお値段!

現役エンジニアのサポートが充実しており、
オンラインのマンツーマンレッスンとQ&A掲示板で即座に悩みを解決することができます

maya python基礎

本サイトの【まとめ】 maya python 基礎 入門!では、
10回シリーズでmaya pythonの基礎が習得できるコンテンツを発信しています。

  • ちまたのスクリプトを読んで、内容を理解したい
  • mayaのスクリプトリファレンスの読み方を習得したい
  • 自分で簡単なツールを書きたい
  • 基礎的なmayaコマンドをpythonで使えるようになりたい

など、mayaでpython基礎を身に着けたい方は、ぜひご活用ください♪

オススメの本。pythonが楽しく学べます☆

復習はこちら↓

コメント

タイトルとURLをコピーしました