3
$\begingroup$

So I want to add a checkbox to the UV/Image Editor tools UI

enter image description here

This is currently my code, You can see where I have commented "#Checkbox Here" and later on in the UpdateOperator I want to check whether the box is ticked or not.

import bpy

class UpdatePanel(bpy.types.Panel):
    bl_category = "EasyFX"
    bl_label = "Update"
    bl_idname = "Update"
    bl_space_type = 'IMAGE_EDITOR'
    bl_region_type = 'TOOLS'

    def draw(self, context):
        layout = self.layout
        col = layout.column(align=True)
        row = col.row(align = True)
        row.operator('object.update_operator', text = "Update")


class FilterPanel(bpy.types.Panel):
    bl_category = "EasyFX"
    bl_label = "Filter"
    bl_idname = "Filter"
    bl_space_type = 'IMAGE_EDITOR'
    bl_region_type = 'TOOLS'

    def draw(self, context):
        layout = self.layout
        col = layout.column(align=True)
        row = col.row(align=True)

        #Checkbox Here


class UpdateOperator(bpy.types.Operator):
    '''Update'''
    bl_idname = "object.update_operator"
    bl_label = "Update Nodes Operator"

    def execute(self, context):

        #if checkbox == True: 
        #    bpy.data.scenes['Scene'].use_nodes = True

        pass
        return {'FINISHED'}

def register():
    bpy.utils.register_class(UpdatePanel)
    bpy.utils.register_class(UpdateOperator)
    bpy.utils.register_class(FilterPanel)
def unregister():
    bpy.utils.unregister_class(FilterPanel)
if __name__ == '__main__':
    register()
$\endgroup$
8
$\begingroup$

For a 'checkbox' you have to provide a BoolProperty:

my_bool = BoolProperty(
    name="Enable or Disable",
    description="A simple bool property",
    default = True) 

I assume you've got more than 1 property at the end, thus I would also suggest create a 'settings class' for your addon by using a PropertyGroup:

class MySettings(PropertyGroup):

    my_bool = BoolProperty()
    my_int = IntProperty()
    my_float = FloatProperty()
    ...

Following example appends a custom panel to the Tool Shelf of the UV/Image Editor (for more options see bl_space_type) and prints the 'current state' of the BoolProperty to the console:

enter image description here

bl_info = {
    "name": "tester",
    "description": "",
    "author": "poor",
    "version": (0, 0, 2),
    "blender": (2, 70, 0),
    "location": "UV/Image Editor > Tool Shelf (T)",
    "warning": "", # used for warning icon and text in addons panel
    "wiki_url": "",
    "tracker_url": "",
    "category": "Test"
}

import bpy

from bpy.props import (StringProperty,
                       BoolProperty,
                       IntProperty,
                       FloatProperty,
                       FloatVectorProperty,
                       EnumProperty,
                       PointerProperty,
                       )
from bpy.types import (Panel,
                       Operator,
                       AddonPreferences,
                       PropertyGroup,
                       )


# ------------------------------------------------------------------------
#    store properties in the active scene
# ------------------------------------------------------------------------

class MySettings(PropertyGroup):

    my_bool = BoolProperty(
        name="Enable or Disable",
        description="A bool property",
        default = False
        )

    my_int = IntProperty(
        name = "Set a value",
        description="A integer property",
        default = 23,
        min = 10,
        max = 100
        )

    my_float = FloatProperty(
        name = "Set a value",
        description = "A float property",
        default = 23.7,
        min = 0.01,
        max = 30.0
        )

# ------------------------------------------------------------------------
#    myTool in the image editor
# ------------------------------------------------------------------------

class UV_OT_my_panel(Panel):
    bl_idname = "UV_OT_my_panel"
    bl_label = "My Tool"
    bl_category = "My Category"
    bl_space_type = 'IMAGE_EDITOR'
    bl_region_type = 'TOOLS'

    def draw(self, context):
        layout = self.layout
        scene = context.scene
        mytool = scene.my_tool

        # display the properties
        layout.prop(mytool, "my_bool", text="Bool Property")
        layout.prop(mytool, "my_int", text="Integer Property")
        layout.prop(mytool, "my_float", text="Float Property")

        # check if bool property is enabled
        if (mytool.my_bool == True):
            print ("Property Enabled")
        else:
            print ("Property Disabled")


# ------------------------------------------------------------------------
# register and unregister functions
# ------------------------------------------------------------------------

def register():
    bpy.utils.register_module(__name__)
    bpy.types.Scene.my_tool = PointerProperty(type=MySettings)

def unregister():
    bpy.utils.unregister_module(__name__)
    del bpy.types.Scene.my_tool

if __name__ == "__main__":
    register()

Note: For demonstration purposes I've also added an Int- and a FloatProperty.

$\endgroup$
4
$\begingroup$

You just need to map a boolean variable to the row property.

import bpy

class FilterPanel(bpy.types.Panel):
    bl_category = "EasyFX"
    bl_label = "Filter"
    bl_idname = "Filter"
    bl_space_type = 'IMAGE_EDITOR'
    bl_region_type = 'TOOLS'

    def draw(self, context):
        scene = context.scene
        layout = self.layout
        col = layout.column(align=True)
        row = col.row(align=True)

        #Checkbox Here
        #(implied from property type = bool)
        row.prop(scene, "my_prop")

def register():
    # add your custom property to the Scene, but if you
    # have to register many properties consider using a 
    # property group. 
    bpy.types.Scene.my_prop = bpy.props.BoolProperty(
        name="Prop name",
        description="Some tooltip",
        default = True)

    bpy.utils.register_class(FilterPanel)

def unregister():
    bpy.utils.unregister_class(FilterPanel)
    del bpy.types.Scene.my_prop
$\endgroup$
  • $\begingroup$ why is the bpy.types.Scene.my_prop defined in the register function and not in the FilterPanel class? $\endgroup$ – mathmaniage Aug 2 at 5:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.