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")
        layout.operator("object.select_inverse", text="Inverse")
        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


If this is set, the menu 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_MT_hello”, and bl_idname is not set by the script, then bl_idname = “OBJECT_MT_hello”

Type :string, default “”

The menu label

Type :string, default “”

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={})
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