[Blender2.8]Pythonスクリプトで、Operatorのトグルボタンを作成する方法

2020/06/11

Blender Python

t f B! P L

BlenderのPythonスクリプトで、オンとオフを切り替える「トグルボタン(Toggle Button)」を作成する方法


ボタンが押されると、処理Aが行われ、ボタンは押された状態のままになり。
もう一度ボタンが押されると、処理Bが行われ、ボタンは元の状態に戻る。
というUIのボタンです。

How to create toggle button operator UI in blender python.


ソースコード

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に代入しています。


ブログ内検索:Search

Translate

ブログ アーカイブ

ラベル

Blogリンクタグ

QooQ