MAYA,Python [MAYA]Pythonでメインウィンドウのメニューバーに項目を追加する

[MAYA]Pythonでメインウィンドウのメニューバーに項目を追加する

maya_python_menubar_add_item_topimage

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ウィンドウのメニューバー

ボタンを押したらメニューバーに項目を追加する

作成した自作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]が追加されます。

メニューに[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”が追加されました。

メニューバーに"newTools"が追加

まとめ:MELの変数「$gMainWindow」を、mel.eval()を使ってPythonの変数に代入

MAYAのメインメニューバーにPythonスクリプトで項目を追加する方法を紹介しました。

メニューバーに項目を追加するには、親となるメニューバーの変数を指定する必要があります。

自作GUIスクリプトのメニューバーはコマンド[menuBarLayout]を親として指定する事ができますが、メインメニューバーでは使えません。

MELにはメインウィンドウのメニューバーの変数として、$gMainWindow を使うことができます。しかしPythonには同じ機能を持つ変数がありません。
PythonにMELスクリプトを組み込む場合は、maya.melモジュールeval() を使います。

gMainWindow = mel.eval(‘$gmw = $gMainWindow’)

MELの変数「$gMainWindow」を、mel.eval()を使ってPythonの変数に代入すれば、Pythonの変数を親として指定する事が出来ます。これでMAYAのメインメニューバーに項目を追加する事ができます。


3DCAD/3DCG/動画編集/ゲーム開発向けクリエイターPCを低下価格で購入できるFRONTIER

秋の感謝セール\【新登場】RTX3070搭載モデルが16万円台~/11月6日(金)19時まで!
最新GPUも格安構成も自由に選べる!パソコン買うならBTOの【FRONTIER】


TechAcademy/テックアカデミー

週2回のビデオチャットや、毎日のチャットサポート、現役プロのメンターから課題のレビューを無制限に受けられる等、マンツーマンのサポートで基礎からしっかり学習できます。

機械学習の基礎が学べる「Pythonコース」
短期間でPython・機械学習が学べるコースPythonを基礎から学び、機械学習プログラムの開発をめざします。
Unityコース
短期間でゲームアプリを開発出来るようになるコースUnityの操作方法とゲームを動かす為のスクリプト、C#を学べます。

Twitter Facebook Pocket LINE はてブ

おすすめの関連記事
コチラの記事も読まれています
あわせてよく読まれている記事
タグ: , ,