MAYAのメインメニューバーに項目を追加する事ができれば、チーム共有のツールをまとめたり、プロジェクト単位で専用ツールを分ける等の使い方ができます。
MAYAでスクリプトを使って自作GUIにメニューバーを追加する方法は簡単にできますが、MAYA自体のメインメニューバーに項目を追加する場合は、あらかじめ設定されている変数を使う必要があります。
そしてその変数はMELにしか無い変数なので、PythonでMAYAのメインメニューバーに項目を追加する場合は、MELコードをPythonに組み込む使い方が必要になります。
この記事では、Pythonスクリプトを使って、MAYAのメインメニューバーに項目を追加する方法を紹介します。メインウィンドウのメニューバーには、あらかじめMELの変数が用意されているところが、スクリプトを書く際に気づきにくい部分です。そこに注意して参考にしてもらえたらと思います。
|
Pythonで作成したGUIウィンドウにメニューバーを追加
まずはPythonスクリプトで自作のGUIウィンドウを作成して、メニューバーを配置したいと思います。
Python:
import maya.cmds as cmds
cmds.window( menuBar=True, width=200 ,height=100)
cmds.menu( label='File', tearOff=True )
cmds.menuItem( label='New' )
cmds.menuItem( label='Open' )
cmds.menuItem( label='Save' )
cmds.menu( label='Tools' )
cmds.menuItem( label='Script_01' )
cmds.menuItem( label='Script_02' )
cmds.menuItem( label='Script_03' )
cmds.showWindow()
説明:
cmds.window( menuBar=True, width=200 ,height=100)
[menuBar=True]でメニューバー付きのウィンドウ
cmds.menu( label='File', tearOff=True )
cmds.menuItem( label='New' )
cmds.menuItem( label='Open' )
cmds.menuItem( label='Save' )
cmds.menu( label='Tools' )
cmds.menuItem( label='Script_01' )
cmds.menuItem( label='Script_02' )
cmds.menuItem( label='Script_03' )
ラベル名が”File”と”Tools”のメニュー項目を追加しました。それぞれの項目に[menuItem]でアイテムを追加しています。
実行:
Pythonで作成した自作GUIウィンドウに、メニューバーが配置されました。
ボタンを押したらメニューバーに項目を追加する
作成した自作GUIウィンドウのメニューバーに項目を新たに追加したいと思います。
コマンド [menu]は、フラグ[parent(p)]で親となるメニューバーを指定する事ができます。メニューバーに新たに項目を追加するには、親のメニューバーを指定して項目を追加します。
親となるメニューバーはコマンド[menuBarLayout]を指定する事ができます。
import maya.cmds as cmds
window = cmds.window( width=200 ,height=100)
menuBarLayout = cmds.menuBarLayout()
cmds.menu( label='File', tearOff=True )
cmds.menuItem( label='New' )
cmds.menuItem( label='Open' )
cmds.menuItem( label='Save' )
cmds.menu( label='Tools' )
cmds.menuItem( label='Script_01' )
cmds.menuItem( label='Script_02' )
cmds.menuItem( label='Script_03' )
cmds.columnLayout()
menuName = 'newMenu'
menuItemName = 'new_Script_04'
cmds.button(label='add_menu',command =('cmds.menu(parent=\"' + menuBarLayout + '\" , label = menuName); cmds.menuItem(label = menuItemName)') )
cmds.showWindow(window)
説明:
window = cmds.window( width=200 ,height=100)
menuBarLayout = cmds.menuBarLayout()
コマンド menuBarLayout は”cmds.window( menuBar=True)”と書いた場合と同様にメニューバーが表示されるので、”menuBar=True” は削除しました。
メニューバーの親と成る変数 menuBarLayout に cmds.menuBarLayout() を代入します。
menuName = 'newMenu'
menuItemName = 'new_Script_04'
cmds.button(label='add_menu',command =('cmds.menu(parent=\"' + menuBarLayout + '\" , label = menuName); cmds.menuItem(label = menuItemName)') )
[parent] で追加する親を指定できるので、親の menuBarLayout を指定して、メニューバーに ”newMenu” の名前で項目を追加します。
実行:
ボタン「add_menu」をクリックすると、メニューに[newNemu]が追加されます。
MAYAのメインメニューバーに項目を追加
自作GUIウィンドウのメニューバーに項目を追加する場合は、親のメニューバーを指定する必要がありました。
自作GUIウィンドウの親メニューバーには、コマンド[menuBarLayout]を指定する事が出来ました。しかしMAYAのメインウィンドウのメニューバーに[menuBarLayout]を指定する事はできません。
MELにはメインウィンドウのメニューバーを指定する変数
$gMainWindow
が用意されています。
この変数を親として指定すれば、自作GUIウィンドウのメニューバーと同様に、メインウィンドウのメニューバーに項目を追加する事ができます。
しかし、MELにはあるこの変数「$gMainWindow」ですが、Pythonにはありません。
なので、PythonでMAYAのメインメニューバーを操作する場合は、MELの変数「$gMainWindow」をPythonのコードに組み込む必要があります。
PythonにMELコマンドを組み込むには、maya.melモジュールのeval() を使います。
|
以下のコマンドを書いて実行してみます。
import maya.cmds as cmds
import maya.mel as mel
gMainWindow = mel.eval('$gmw = $gMainWindow')
newMenu = cmds.menu(parent= gMainWindow, tearOff=True,label='newTools' )
cmds.menuItem(parent= newMenu, label='newMenuScript_01' )
説明:
gMainWindow = mel.eval('$gmw = $gMainWindow')
MELの変数「$gMainWindow」を別の変数に代入するコードの結果を、Pythonの変数“gMainWindow”で受け取りました。これで、MELだけの変数「$gMainWindow」が、Pythonの変数“gMainWindow”として使うことができます。
newMenu = cmds.menu(parent= gMainWindow, tearOff=True,label='newTools' )
親のメニューバーとして“gMainWindow”を指定します。
実行:
メニューバーに”newTools”が追加されました。
|
まとめ:MELの変数「$gMainWindow」を、mel.eval()を使ってPythonの変数に代入
MAYAのメインメニューバーにPythonスクリプトで項目を追加する方法を紹介しました。
メニューバーに項目を追加するには、親となるメニューバーの変数を指定する必要があります。
自作GUIスクリプトのメニューバーはコマンド[menuBarLayout]を親として指定する事ができますが、メインメニューバーでは使えません。
MELにはメインウィンドウのメニューバーの変数として、$gMainWindow がありますが、Pythonには同じ機能を持つ変数がありません。
■Pythonスクリプトで MAYAのメインメニューバーに項目を追加する方法
maya.melモジュールの eval()を使えば、PythonにMELスクリプトを組み込めるので
MELの変数「$gMainWindow」を、mel.eval() に指定しPythonの変数に代入すれば、Pythonの変数を親として扱う事ができます。
gMainWindow = mel.eval(‘$gmw = $gMainWindow’)
これでMAYAのメインメニューバーに項目を追加する事ができます。
|
Adobeのプラチナパートナーに認定されているデジタルハリウッドのオンラインCGスクール「デジハリONLINE」が提供する「Adobeマスター講座」。
基礎動画教材とAdobe creative cloudの一年版ライセンスがセットになった、コスパ最強のパッケージプランです。
学習ノルマは一切ありません。AdobeCCだけを目的に契約してもOK!
>> デジハリONLINE「Adobeマスター講座」
TechAcademy/テックアカデミー
週2回のビデオチャットや、毎日のチャットサポート、現役プロのメンターから課題のレビューを無制限に受けられる等、マンツーマンのサポートで基礎からしっかり学習できます。
機械学習の基礎が学べる「Pythonコース」 |
短期間でPython・機械学習が学べるコースPythonを基礎から学び、機械学習プログラムの開発をめざします。 |
Unityコース |
短期間でゲームアプリを開発出来るようになるコースUnityの操作方法とゲームを動かす為のスクリプト、C#を学べます。 |
|
|
BTOパソコンの草分け的ブランドFRONTIER(フロンティア) 3DCG/動画編集/ゲーム用途に合わせてCPUやGPUなどパーツを自由に選べてコスパにもこだわる方にオススメ。 |
|
|
|
|
|