ウインドウの作り方

Python における GUI と簡単なウインドウ

Maya におけるウインドウやメニューなどの GUI は MEL スクリプトによって作られていますが、 Python スクリプトによっても GUI のカスタマイズ・独自メニューの作成ができるようになります。

これから、 Python 関数や自作の関数を操作するオリジナル GUI を作ってゆきましょう。
今回は簡単なスクリプトなので、プロシージャを宣言しないで スクリプト エディタ で読み込むと、すぐに実行できるように関数をそのまま並べて作ってゆきます。
以下のスクリプトは スクリプト エディタ のメニュー ファイル → スクリプトのロード で読み込んで実行してください。

ウインドウの作り方

ウインドウを作るには pm.window() 関数を使用します。
ただし、ウインドウを実際に表示するためには、pm.window() 関数に visible=True をつけて実行するか、この関数の後で pm.showWindow() 関数を実行しますが、 ここではwith文で表示する方法を使います。

スクリプトの解説

import pymel.core as pm
pymel.core モジュールをインポートしてpmという名前で使用できるようにします。
with pm.window(title='window1'):
ウインドウバーに window1 というタイトルが表示されたウインドウを作成します。
window() 関数も sphere() 関数などと同じく作られたオブジェクト(ウインドウ)の名前を返します。 このスクリプトでは返されたウインドウの名前は使っていませんが、必要ならば変数に代入しておき、 後で使うこともできます。
なお、title の後ろの window1 はタイトルであってウインドウの名前ではないので注意してください。
pass
ウインドウ内に何も表示しないので、何もしない命令passを書いておきます。

ボタンのついたウインドウ

ウインドウにボタンなどを配置してゆくには、レイアウトコマンドが必要です。
レイアウトコマンドとはコントロールと呼ばれる部品(ボタンやスライダーなど)をどのような方法で並べるかを決めるためのものです。
レイアウトコマンドには他にも様々な種類がありますが、 上から順番に並べてゆくだけなら以下のように pm.columnLayout() を使用します。

スクリプトの解説

import pymel.core
pymel.core モジュールをインポートします。
with pm.window(title='window2'):
ウインドウバーに window2 というタイトルが表示されたウインドウを作成します。
この命令以下がウインドウの中身になります。
with pm.columnLayout():
レイアウトを作成します。
GUI の部品をウインドウに配置してゆく時にはレイアウトが必ず必要です。
この命令の後に配置される GUI の部品(ここでは pm.button())は縦1列に並べられます。
pm.button()
ボタンを 1 つ作ります。
ここではボタンを押した時に実行する関数を割り当てていないので押しても何も実行されません。
ボタン上のラベルには、何も指定されていなければ button1 などのボタンの名前が表示されます。

ボタンに関数を割り当てる

ボタンが押された時などに特定の関数を実行させるためには command フラグを使用します。

スクリプトの解説

import pymel.core as pm
pymel.core モジュールをインポートしてpmという名前で使用できるようにします。
with pm.window(title='window3'):
ウインドウバーに window3 というタイトルが表示されたウインドウを作成します。
この命令以下がウインドウの中身になります。
with pm.columnLayout():
レイアウトを作成します。
この命令の後に配置される GUI の部品(ここでは pm.button())は縦1列に並べられます。
pm.button(label='sphere', command='pm.sphere()')
ボタンを1つ作ります。
このボタンを押すと command の後にある文字列(' から次の ' まで)を実行します。 ここでは pm.sphere() 関数が実行されて NURBS の球体が作られます。
command の後では Python 関数だけでなく自分で作った関数も実行できます。
また、2つ以上の複数の関数を実行することもできます。 (下の練習問題を参照してください)
labelの後にある文字列 'sphere' がボタンの上に表示されるラベルになります。

練習

まとめ

参考


Prev | Next
Home | Contents
Mail