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.


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")


Simple Object Panel

This panel has a Panel.poll and Panel.draw_header function, even though the contents is basic this closely resembles 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'}

    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 =
        box.label("Selection Tools")
        box.operator("object.select_all").action = 'TOGGLE'
        row = box.row()
        row.operator("object.select_all").action = 'INVERT'


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'

    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")


base class — bpy_struct

subclasses — IMAGE_UV_sculpt, IMAGE_UV_sculpt_curve

class bpy.types.Panel(bpy_struct)

Panel containing UI elements

Type:string, default “”, (never None)

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

Type:string, default “”, (never None)

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 “”, (never None)

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

Type:string, default “”, (never None)

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 Hide Header, If set to False, 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’}

The region where the panel is going to be used in


The space where the panel is going to be used in

  • EMPTY Empty.
  • VIEW_3D 3D View, 3D viewport.
  • TIMELINE Timeline, Timeline and playback controls.
  • GRAPH_EDITOR Graph Editor, Edit drivers and keyframe interpolation.
  • DOPESHEET_EDITOR Dope Sheet, Adjust timing of keyframes.
  • NLA_EDITOR NLA Editor, Combine and layer Actions.
  • IMAGE_EDITOR UV/Image Editor, View and edit images and UV Maps.
  • SEQUENCE_EDITOR Video Sequence Editor, Video editing tools.
  • CLIP_EDITOR Movie Clip Editor, Motion tracking tools.
  • TEXT_EDITOR Text Editor, Edit scripts and in-file documentation.
  • NODE_EDITOR Node Editor, Editor for node-based shading and compositing tools.
  • LOGIC_EDITOR Logic Editor, Game logic editing.
  • PROPERTIES Properties, Edit properties of active object and related data-blocks.
  • OUTLINER Outliner, Overview of scene graph and all available data-blocks.
  • USER_PREFERENCES User Preferences, Edit persistent configuration settings.
  • INFO Info, Main menu bar and list of error messages (drag down to expand and display).
  • FILE_BROWSER File Browser, Browse for files and assets.
  • CONSOLE Python Console, Interactive programmatic console for advanced editing and script development.
Type:string, default “*”, (never None)

Defines the structure of the panel in the UI

Type:UILayout, (readonly)

XXX todo

Type:string, default “”, (never None)
Type:boolean, default False
classmethod poll(context)

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

Return type:boolean

Draw UI elements into the panel UI layout


Draw UI elements into the panel’s header UI layout

Inherited Properties

Inherited Functions