Panel(bpy_struct)

Basic Panel Example

This script is a simple panel which will draw into the object properties section.

Notice the ‘CATEGORY_PT_name’ Panel.bl_idname, this is a naming convention for panels.

Note

Panel subclasses must be registered for blender to use them.

import bpy


class HelloWorldPanel(bpy.types.Panel):
    bl_idname = "OBJECT_PT_hello_world"
    bl_label = "Hello World"
    bl_space_type = 'PROPERTIES'
    bl_region_type = 'WINDOW'
    bl_context = "object"

    def draw(self, context):
        self.layout.label(text="Hello World")


bpy.utils.register_class(HelloWorldPanel)

Simple Object Panel

This panel has a Panel.poll and Panel.draw_header function, even though the contents is basic this closely resemples blenders panels.

import bpy


class ObjectSelectPanel(bpy.types.Panel):
    bl_idname = "OBJECT_PT_select"
    bl_label = "Select"
    bl_space_type = 'PROPERTIES'
    bl_region_type = 'WINDOW'
    bl_context = "object"
    bl_options = {'DEFAULT_CLOSED'}

    @classmethod
    def poll(cls, context):
        return (context.object is not None)

    def draw_header(self, context):
        layout = self.layout
        obj = context.object
        layout.prop(obj, "select", text="")

    def draw(self, context):
        layout = self.layout

        obj = context.object
        row = layout.row()
        row.prop(obj, "hide_select")
        row.prop(obj, "hide_render")

        box = layout.box()
        box.label("Selection Tools")
        box.operator("object.select_all")
        row = box.row()
        row.operator("object.select_inverse")
        row.operator("object.select_random")


bpy.utils.register_class(ObjectSelectPanel)

Mix-in Classes

A mix-in parent class can be used to share common properties and Menu.poll function.

import bpy


class View3DPanel():
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'TOOLS'

    @classmethod
    def poll(cls, context):
        return (context.object is not None)


class PanelOne(View3DPanel, bpy.types.Panel):
    bl_idname = "VIEW3D_PT_test_1"
    bl_label = "Panel One"

    def draw(self, context):
        self.layout.label("Small Class")


class PanelTwo(View3DPanel, bpy.types.Panel):
    bl_idname = "VIEW3D_PT_test_2"
    bl_label = "Panel Two"

    def draw(self, context):
        self.layout.label("Also Small Class")


bpy.utils.register_class(PanelOne)
bpy.utils.register_class(PanelTwo)

base class — bpy_struct

class bpy.types.Panel(bpy_struct)

Panel containing UI elements

bl_context

The context in which the panel belongs to. (TODO: explain the possible combinations bl_context/bl_region_type/bl_space_type)

Type :string, default “”
bl_idname

If this is set, the panel gets a custom ID, otherwise it takes the name of the class used to define the panel. For example, if the class name is “OBJECT_PT_hello”, and bl_idname is not set by the script, then bl_idname = “OBJECT_PT_hello”

Type :string, default “”
bl_label

The panel label, shows up in the panel header at the right of the triangle used to collapse the panel.

Type :string, default “”
bl_options

Options for this panel type

  • DEFAULT_CLOSED Default Closed, Defines if the panel has to be open or collapsed at the time of its creation..
  • HIDE_HEADER Show Header, If set to True, the panel shows a header, which contains a clickable arrow to collapse the panel and the label (see bl_label)..
Type :enum set in {‘DEFAULT_CLOSED’, ‘HIDE_HEADER’}, default {‘DEFAULT_CLOSED’}
bl_region_type

The region where the panel is going to be used in.

Type :enum in [‘WINDOW’, ‘HEADER’, ‘CHANNELS’, ‘TEMPORARY’, ‘UI’, ‘TOOLS’, ‘TOOL_PROPS’, ‘PREVIEW’], default ‘WINDOW’
bl_space_type

The space where the panel is going to be used in.

Type :enum in [‘EMPTY’, ‘VIEW_3D’, ‘GRAPH_EDITOR’, ‘OUTLINER’, ‘PROPERTIES’, ‘FILE_BROWSER’, ‘IMAGE_EDITOR’, ‘INFO’, ‘SEQUENCE_EDITOR’, ‘TEXT_EDITOR’, ‘AUDIO_WINDOW’, ‘DOPESHEET_EDITOR’, ‘NLA_EDITOR’, ‘SCRIPTS_WINDOW’, ‘TIMELINE’, ‘NODE_EDITOR’, ‘LOGIC_EDITOR’, ‘CONSOLE’, ‘USER_PREFERENCES’], default ‘EMPTY’
layout

Defines the structure of the panel in the UI.

Type :UILayout, (readonly)
text

XXX todo

Type :string, default “”
classmethod poll(context)

If this method returns a non-null output, then the panel can be drawn.

Return type:boolean
draw(context)

Draw UI elements into the panel UI layout.

draw_header(context)

Draw UI elements into the panel’s header UI layout.

classmethod append(draw_func)

Append a draw function to this menu, takes the same arguments as the menus draw function.

classmethod prepend(draw_func)

Prepend a draw function to this menu, takes the same arguments as the menus draw function.

classmethod remove(draw_func)

Remove a draw function that has been added to this menu

Inherited Properties

Inherited Functions

Table Of Contents

Previous topic

Paint(bpy_struct)

Next topic

ParentActuator(Actuator)