GUIサンプル ツリーと数値入力

βテストにご参加いただきまことにありがとうございます。

次のサンプルは、GUIらしいギミックです。

GUI部品をそのまま多数並べると、見通しが悪くなります。
これを避けるためにGUI部品を目的ごとに分類、ツリー構造にします。

TreeNode()とTreePop()の組み合わせで、1つのツリーになります。
ツリーは親子構造にもできます。TreeNode()の中にTreeNode-TreePopの組み合わせを入れることで親子構造になります。
TreePop()は、ツリーが開いているときに、ツリーの終了をあらわす関数です。
TreeNode()が開くとtrueが帰ります。ifで検出して、開いているときにGUIを表示、最後にTreePop()を記述します。
ツリーが閉じているときは、記述不要です。

このサンプルでは、ツリーのなかに数値入力部品を配置しています。
入力系の部品は、変数に入力値を渡すため、Pythonでは一工夫が必要になります。
本実装では、list型変数を入力関数に渡しています。
InputFloat()、InputInt()は、それぞれ浮動小数点数、整数を入力します。サンプルでは、それぞれの値を受け渡しするためにfNum、nNum変数をlist型で初期化しています。
list型変数の最初の要素に値を入れます。

PushItemWidth()は、GUI部品の表示幅を設定します。設定しない場合、標準の表示幅になります。見た目が微妙になるため、表示幅を制御したほうがよいです。
PushItemWidth()は、PopItemWidth()と必ず組にしてください。

#LAYOUT
import vrmapi

nNum = [0]
fNum = [0.0]

def vrmevent(obj,ev,param):
    if ev == 'init':
        obj.SetEventFrame()
    elif ev == 'broadcast':
        dummy = 1
    elif ev == 'timer':
        dummy = 1
    elif ev == 'time':
        dummy = 1
    elif ev == 'after':
        dummy = 1
    elif ev == 'frame':
        global nNum
        global fNum
        vrmapi.ImGui().Begin("win1","Sample Window")

        if vrmapi.ImGui().TreeNode("tree1", "Tree-A"):
            vrmapi.ImGui().PushItemWidth(160.0)
            vrmapi.ImGui().InputFloat("f1", "浮動小数点数", fNum)
            vrmapi.ImGui().InputInt("n1", "整数", nNum)
            vrmapi.ImGui().PopItemWidth()
            vrmapi.ImGui().TreePop()

        vrmapi.ImGui().End()
    elif ev == 'keydown':
        dummy = 1
実行結果