こんにちは!ビーバー@ゲーム業界歴約20年python勉強中 です。
maya python初心者の方のために、カンタン・わかりやすい解説サイトを作っています。
今日は、maya cmdsで作ったGUIに、
テキストフィールドを入れる方法を解説していきたいと思います!
※当サイトで紹介する商品は、アフィリエイトプログラムを利用しています。
textField()のカンタン解説
テキストフィールドを作るコマンドは textfield() です。
それじゃあさっそく、コマンドの機能をカンタンに解説していくよ!
テキストフィールドを作成する
テキストフィールドをウィンドウに配置してみましょう!
from maya import cmds
window = cmds.window()
layout = cmds.columnLayout( parent=window )
button = cmds.button( parent=layout)
text_field = cmds.textField( parent=layout )
cmds.showWindow()
ウィンドウにボタンとテキストフィールドができました。
テキストフィールドを作成した1行はこちらです。
text_field = cmds.textField( parent=layout )
parent=layout っていうのは何かな?
それは、テキストフィールドノードの親を指定しているんだよ!
親子づけの指定をしておくと、フィールドが意図してないウィンドウにくっついちゃった、
みたいなのを防ぐことができるよ。
親ノードの指定はparentフラグを使って行います。
ちなみに、layout変数や text_field変数を実行すると、
中に入っているレイアウトノードや、テキストフィールドノード名を確認することができます。
デフォルトで表示するテキストの指定
次に、デフォルトで表示させるテキストを指定してみましょう!
テキストフィールドを作成する一行を、以下のように変更します。
cmds.textField( text="Apple", parent=layout )
おお!フィールドに「Apple」って入った!!
デフォルトで表示するテキストの指定は、textフラグを使って行います。
OK!これでテキストフィールドを作って、文字を表示させる方法がわかった。
次は、ユーザが入力した文字列を取得する方法をみてみよう
フィールドに入力された文字列の取得
テキストフィールドに入力された文字列を取得するには、
textField()のクエリモードを使います。
word = cmds.textField(text_field, q=True, text=True)
q=True っていうのがクエリモードをオンにしているのかな?
っていうかクエリモードって何、、、(泣)
こういうの、コマンドリファレンスで見たことない?
あっ!!見おぼえあるよ、、、!
モードとは、pythonコマンドの動作を指定するフラグです。
- 「C」クリエイトモード
コマンドのデフォルトとなるモード。ノードを作成する動作
モードの指定をしなければ、自動でクリエイトモードの動作になる - 「Q」クエリモード
ノードを問い合わせするモード。すでに作成済みノードの各種値などを照会する - 「E」エディットモード
エディット、つまり編集モード。
ノードの持っている値などを編集するときにエディットモードを指定する
よくわかったよ~!コマンドの動作を指定するフラグだったんだね。
話を戻して、
テキストフィールドに入力された文字列を取得するには、
textField()のクエリモードを使います。
スクリプトにすると以下のようになります。
word = cmds.textField(text_field, q=True, text=True)
このように書くことで、テキストフィールドに入力されている文字列が 変数wordの中に入ります。
試しに、以下のように実行してみましょう。
#結果:Orange# ってかえってきたね。
ちゃんとフィールドのテキストを取得しているよ~!
簡単なツールにしてみよう
textField()を使って、簡単なツールを作ってみましょう。
ボタンを押すと、入力された文字+ゲットだぜ!を表示するツールです。
これをつくるには、まず、、、?
print(word + ” gotcha!!”) って書けば、
②文字列 + gotcha!! を表示はできるかな?
そうそう!word変数には、フィールドに入力された文字列をいれてあるからね。
フィールドの文字列取得と、プリントの処理をまとめて
getText()っていう関数にしてみよう。
def getText():
word = cmds.textField(text_field, q=True, text=True)
print(word + " gotcha!!")
このgetText関数を、UIのボタンに仕込めばいいわけだ☆
ボタンを押したら実行するコマンドは、
buttonコマンドのcommandフラグで指定するよ!
from maya import cmds
window = cmds.window()
layout = cmds.columnLayout( parent=window )
button = cmds.button( parent=layout, command="getText()" )
text_field = cmds.textField( text="Apple", parent=layout )
cmds.showWindow()
def getText():
word = cmds.textField(text_field, q=True, text=True)
print(word + " gotcha!!")
4行目で、ボタンにgetText()関数をしこんでいるよ!
それじゃあ実行してみよう!
スクリプトを実行したところだね。ウィンドウができた!
そしたら、フィールドのテキストを「Orange」に変えてボタンを押してみるね。
おーーーーー!やったあ!!オレンジ、ゴッチャ~~~~☆
やったね!
まとめ
今回は、テキストフィールドの作り方をご紹介しました!
GUIにテキストフィールドを作るには、textfield() を使います。
テキストフィールドを作るときは、親のノードを指定するようにしましょう!
デフォルトで表示するテキストは textフラグで指定できます。
フィールドに入力された文字の取得はtextFieldのクエリモードを使います。
word = cmds.textField( “取得するノード名”, q=True, text=True)
取得した文字列は、こんな風に変数に入れておくと使いやすいよ!
以上、テキストフィールドの作り方でした!
また読みに来てくださいね。
コメント