GUI作りの基礎の基礎の基礎のお勉強
mayaのPythonは maya.cmds よりも pymel の方がよさげというお話を聴いたので、ちょっとやってみようかなと。
pymelのインポートは
from pymel.core import *
ってしているところと
import pymel.core as pm
とかしているところと二通りぐらいネットを見ているとありますかな。取りあえず後者でいきませう。 GUI周りに関するドキュメントは
Building User Interfaces [PyMEL 1.0.6 documentation]
あたりをまずは読めばいいのかい? このドキュメントを解説というか検証してくれている日本語サイトありました。
PymelのGUIについてかんがえる [日々の忘備録]
助かりますなぁ。
![](https://blogimg.goo.ne.jp/user_image/57/6a/c088286a908693a042f9d5a63c0bda6a.jpg?random=f38e0f54145deec18b703d3e74114f93)
lambda式ってのが個人的に実はよく分かっていなかったのです。
>>> def mult( x, y ):
... return x * y
...
>>> print mult( 5, 3 )
15
というのを
>>> f = lambda x, y: x * y
>>> print f( 5, 3 )
15
という書き方が出来る。文ではなく式なので、def では出来ない書き方が出来ますぜって事らしい。
さて、読み進めていくと、lambdaの欠点ってのが書かれていて、for文でボタンを作る時うまくいかないって事が描かれています。 実行するとすぐに分かるのだけど、UIはきちんと用意されるけど、実行結果が意図通りではないってことっすね。
![](https://blogimg.goo.ne.jp/user_image/1d/32/94a7f60b9f5cb9372506d7a9a13c94fa.jpg?random=8895eae68ec7f9b024e4f33c6d2cd16e)
ボタンがすべて用意された段階で、name に入っている値はリストnamesの一番最後の値だから、ってことかな?
で、それを解決する手段として、Callbackクラスが用意されております、だそうな。
![](https://blogimg.goo.ne.jp/user_image/3c/0f/85b8b8e4fa86c18112d877a3adefc12f.jpg?random=40ac454370f66bdb682b7f3be1b290da)
ふむ。
レイアウトについては、ここでwithステートメントが出てきますね。GUI部品をレイアウトして行く際に、入れ子にしていくわけですけど、その時に使用するみたい。withについては、あまりよく分かっておりませんが、クラスの中に__enter__ と__exit__ メソッドが存在している物については利用出来るようです。
でまぁ、やってみるわけですが…
![](https://blogimg.goo.ne.jp/user_image/36/29/ae2cd90138d5cc7b5c6d366bc70b8ddb.jpg?random=1262d23c2b936a2817275c7865fe3bc5)
AというframeLayoutの幅をウインドウの幅にするにはどうすんでしょ。
ていうか、Bの中でredistribute(1,2,3)って書いて、ボタンの幅の比率を変えているわけですが(1:2:3:1:1 になっているはず)、引数の最初の数字を1以外にするとウインドウ幅がAに合わせられちゃって、ボタンがはみ出すんですが、これはMac版のバグですか? …と思ってWindowsで実行してみたら同じ結果だった。 何か間違ってんだろうなぁ…
![](https://blogimg.goo.ne.jp/user_image/7f/f4/3f516ad906a962ca3eb55a622cc4340d.jpg?random=d0408f5e8946c9ec641834e8de584ca3)
というわけで自分への忘備録として…
コメント |
コメントはありません。 |
![]() |
コメントを投稿する |
![]() |
ブログ作成者から承認されるまでコメントは反映されません |