Qt の Designer ツールを使用すると、インタフェースをインタラクティブに作成して移植可能な XML フォーマットで保存できます。Maya には、 というコマンドがあり、MEL や Python のスクリプトで使用してこのようなファイルを Maya にロードし、可能な場合は Maya の標準コントロールに変換できます。
以下の図に、Qt Designer を使用して作成した、コンボボックス、テキスト フィールド、関連ラベル、下に 2 つのボタンを配置したボタン ボックスで構成された単純なダイアログを示します。
このダイアログをファイル /home/autodesk/createDialog.ui に保存してから Maya にロードし、以下の MEL コマンドを使用して表示するとします。
string $dialog = `loadUI -uiFile "/home/autodesk/createDialog.ui"`; showWindow $dialog;
import maya.cmds as cmds dialog = cmds.loadUI(uiFile='/home/autodesk/createDialog.ui') cmds.showWindow(dialog)
コマンドは、該当する Maya コマンドを実行することで、ファイルに指定したウィジェットを作成します。たとえば、前述の例にある 2 つのラベルは Maya の コマンドを使用して作成します。comboBox コントロールは コマンド、入力フィールドは コマンドで作成します。これで、作成したコントロールは通常の手順で作成したかのように MEL と Python のスクリプトで操作できます。
Qt Designer のウィジェットにダイナミック プロパティを追加することによって、コントロールの作成に使用したコマンドにフラグを渡すことができます。このプロパティの名前は -width の冒頭のハイフンなどを含め、フラグの名前に一致している必要があります。MEL ではなく Python を使用してコントロールを作成する場合は、冒頭のハイフンを + に置き換えて +width のようにします。同一のウィジェットに MEL と Python 両方のフラグを指定すると、動作が定義されないため、エラーとなります。フラグが引数を取る場合は、引数をプロパティの値として指定します。
以下の図に、Qt Designer の comboBox に -changeCommand プロパティを追加したところを示します。
対応する optionMenu コントロールを作成すると、-changeCommand フラグが設定されてコマンド文字列「newObjectType()」が実行されます。
コマンドで同等の Maya コントロールのない Qt ウィジェットを検出した場合でも、Qt ウィジェットが作成されますが、MEL または Python のスクリプトからアクセスすることはできません。この例として、ダイアログの下部にあるボタン ボックスを挙げます。ここでは、Maya に該当するコントロールがない QDialogButtonBox ウィジェットを使用しています。このため、ボタン ボックス自体もその中にあるボタンにもアクセスできません。ボタン ボックスを使用せずにダイアログに個別にボタンを配置した場合、 コマンドは Maya の コマンドを使用してボタンを作成しており、スクリプトへのアクセスが可能になっています。
ファイルのあらゆるレイアウトは汎用レイアウトとして作成され、Maya には コマンドを使用しなければアクセスできません。、 といった固有のレイアウト タイプ用のコマンドは使用しません。
Maya でコントロールまたはレイアウトに指定された名前は、Qt Designer の objectName プロパティに指定した名前です。 最上層のウィンドウの名前は一意である必要がありますが、指定した名前がすでに使用されている場合、 コマンドで末尾に数字を追加して一意にします。