Blender PythonでUIにGUI部品を追加するときは、「チェックボックス」「エディットボックス」として追加するのではなく、
「String型のプロパティ」を登録するとエディットボックスとして表示され、
「Bool型のプロパティ」を登録するとチェックボックスとして表示される。
import bpy #テキストボックスを定義 class myCInputs(bpy.types.PropertyGroup):
myTextField: bpy.props.StringProperty( name="テキスト", description="説明文", default="", maxlen=1024, # 最大文字数 subtype="NONE" )
myCheckField: bpy.props.BoolProperty( name="チェック", default=True )
class myCTool_PT_panel(bpy.types.Panel): bl_label = "パネルタイトル" bl_category = "タブタイトル" bl_space_type = "VIEW_3D" bl_region_type = "UI" def draw(self, context): layout = self.layout #横に並べるならrow.propを使う # row = layout.row() layout.prop(context.scene.myinputs, "myTextField") layout.prop(context.scene.myinputs, "myCheckField") classes = ( myCInputs, myCTool_PT_panel ) def register(): for cls in classes: bpy.utils.register_class(cls) bpy.types.Scene.myinputs = bpy.props.PointerProperty(type=myCInputs) def unregister(): for cls in classes: bpy.utils.unregister_class(cls) del bpy.types.Scene.myinputs if __name__ == "__main__": register()
import bpy
# ボタンを定義 class execButton(bpy.types.Operator): bl_idname = "szl.button" bl_label = "access to property" def execute(self, context): print( context.scene.myinputs.myTextField)# 他のGUI部品の値を取得 return{'FINISHED'}
# ボタン以外のUIを定義 class myCInputs(bpy.types.PropertyGroup): myTextField: bpy.props.StringProperty( name="テキスト", description="説明文", default="", maxlen=1024, # 最大文字数 subtype="NONE" ) myCheckField: bpy.props.BoolProperty( name="チェック", default=True )
class myCTool_PT_panel(bpy.types.Panel): bl_label = "パネルタイトル" bl_category = "タブタイトル" bl_space_type = "VIEW_3D" bl_region_type = "UI" def draw(self, context): layout = self.layout #横に並べるならrow.propを使う # row = layout.row() layout.prop(context.scene.myinputs, "myTextField") layout.prop(context.scene.myinputs, "myCheckField") layout.operator("szl.button")
classes = ( myCInputs, execButton, myCTool_PT_panel, ) def register(): for cls in classes: bpy.utils.register_class(cls) bpy.types.Scene.myinputs = bpy.props.PointerProperty(type=myCInputs) def unregister(): for cls in classes: bpy.utils.unregister_class(cls) del bpy.types.Scene.myinputs if __name__ == "__main__": register()