BlenderのPythonスクリプトで、オンとオフを切り替える「トグルボタン(Toggle Button)」を作成する方法
ボタンが押されると、処理Aが行われ、ボタンは押された状態のままになり。
もう一度ボタンが押されると、処理Bが行われ、ボタンは元の状態に戻る。
というUIのボタンです。
ソースコード
import bpy bpy.types.Scene.testBool = bpy.props.BoolProperty(name = 'test Bool', default = False) class TestOperator(bpy.types.Operator): bl_idname = 'test.test_operator' bl_label = 'Test Operator' def execute(self, context): if bpy.context.scene.testBool == False: print('Button Pressed') bpy.context.scene.testBool = True else: print('Button Un Pressed') bpy.context.scene.testBool = False return{'FINISHED'} class TestPanel(bpy.types.Panel): bl_space_type = 'VIEW_3D' bl_region_type = 'UI' bl_category = 'TestTab' bl_label = 'Test Toggle' def draw(self, context): layout = self.layout if bpy.context.scene.testBool == True: btn_text = 'button ON' else: btn_text = 'button OFF' layout.operator('test.test_operator', text = btn_text, depress = bpy.context.scene.testBool) def register(): bpy.utils.register_class(TestOperator) bpy.utils.register_class(TestPanel) def unregister(): bpy.utils.unregister_class(TestOperator) bpy.utils.unregister_class(TestPanel) if __name__ == '__main__': register()
解説
33行目のlayout.operatorの"depress"が、ボタンが押された状態かどうかを設定するプロパティになります。
そこに、Bool値の変数を入れることで、押された状態を任意に変更できるようにしています。
そのBool値は、3行目のbpy.types.Scene.testBoolで宣言しています。
また、9行目のtestOperatorクラスのexecute関数内でこのBool値によって処理内容が分かれるようにし、
12行目、15行目でそれぞれの処理の後に、このBool値が反転するようにして、ボタンと処理内容が連動するようにしています。
28行目~31行目では、ボタンに表示するテキストがBool値によって切り替わるようにbtn_textに設定し、こちらも33行目のtextに代入しています。
0 件のコメント:
コメントを投稿