Basic Menu Example

This script is a simple menu, menus differ from panels in that they must reference from a header, panel or another menu.

Notice the ‘CATEGORY_MT_name’ Menu.bl_idname, this is a naming convention for menus.


Menu subclasses must be registered before referencing them from blender.


Menu’s have their Layout.operator_context initialized as ‘EXEC_REGION_WIN’ rather then ‘INVOKE_DEFAULT’, so if the operator context needs to initialize inputs from the Operator.invoke function then this needs to be explicitly set.

import bpy

class BasicMenu(bpy.types.Menu):
    bl_idname = "OBJECT_MT_select_test"
    bl_label = "Select"

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

        layout.operator("object.select_all", text="Select/Deselect All").action = 'TOGGLE'
        layout.operator("object.select_all", text="Inverse").action = 'INVERT'
        layout.operator("object.select_random", text="Random")


# test call to display immediately.

Extending Menus

When creating menus for addons you can’t reference menus in blenders default scripts.

Instead the addon can add menu items to existing menus.

The function menu_draw acts like Menu.draw

import bpy

def menu_draw(self, context):


base class — bpy_struct

class bpy.types.Menu(bpy_struct)

Editor menu containing buttons

Type :string, default “”

If this is set, the menu gets a custom ID, otherwise it takes the name of the class used to define the menu (for example, if the class name is “OBJECT_MT_hello”, and bl_idname is not set by the script, then bl_idname = “OBJECT_MT_hello”)

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

The menu label

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

Defines the structure of the menu in the UI

Type :UILayout, (readonly)
classmethod poll(context)

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

Return type:boolean

Draw UI elements into the menu UI layout

classmethod append(draw_func)

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


Define these on the subclass - preset_operator - preset_subdir

path_menu(searchpaths, operator, props_default={}, filter_ext=None)
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


Next topic