Let's say I want to create UI for addon which allows to choose options (eg delete meshes only) before script execution. How can I achieve that? I know about F6 panel (and options in the T-panel) but it works only after I run a script.

UI mockup

  • $\begingroup$ You can use an operator with a dialog, as explained in the docs. $\endgroup$ Jan 19 '14 at 14:52

You can also register properties on bpy.types such as WindowManager, Scene etc., add them to a panel together with an operator (will appear as button) and pass the value of a global property (bpy.types) to the operator as operator property:

import bpy

class PrintSomeString(bpy.types.Operator):
    bl_label = "Print Some String"
    bl_idname = "object.print_some_string"
    bl_options = {'REGISTER', 'UNDO'}

    print_this = bpy.props.StringProperty(name="Print this")

    def execute(self, context):
        self.report({'INFO'}, self.print_this)
        return {'FINISHED'}

class HelloWorldPanel(bpy.types.Panel):
    """Creates a Panel in the Object properties window"""
    bl_label = "Hello World Panel"
    bl_idname = "OBJECT_PT_hello"
    bl_space_type = 'PROPERTIES'
    bl_region_type = 'WINDOW'
    bl_context = "object"

    def draw(self, context):
        layout = self.layout
        layout.prop(context.window_manager, "some_string")

        props = layout.operator(PrintSomeString.bl_idname)
        props.print_this = context.window_manager.some_string

        props = layout.operator(PrintSomeString.bl_idname, text="Print welcome message")
        props.print_this = "Welcome to Blender!"

def register():
    bpy.types.WindowManager.some_string = bpy.props.StringProperty(name="Some String")

def unregister():
    del bpy.types.WindowManager.some_string

if __name__ == "__main__":

(Adds a panel to the Object tab in Properties Editor)


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.