Scripting
PME allows for advanced customization and automation using Blender’s Python API. This article provides an overview of PME’s scripting capabilities and explains the built-in global variables and functions.
Tutorials
Global Variables
Variables |
Description |
---|---|
|
Name of the active menu |
|
Name of the active slot |
|
|
|
|
|
|
|
|
|
|
|
Current UILayout object L.box().label(text="My Label")
|
|
Current Event object E.ctrl and E.shift and message_box("Ctrl+Shift Pressed")
|
|
pme.UserData instance for user data storage U.foo = "value"
U.update(foo="value1", bar="value2")
U.foo
U.get("foo", "default_value")
|
Global Functions
Below is a list of global functions provided by PME.
Common Functions
- execute_script(path, **kwargs)
Execute an external Python script.
- Parameters:
path (str) – Path to the
.py
file.kwargs – Additional keyword arguments passed to the script.
- Returns:
Value of local variable
return_value
if it exists, otherwiseTrue
.
Example:
# Display 'Hello World!' message: execute_script("scripts/hello_world.py", msg="Hello World!") # scripts/hello_world.py: # message_box(kwargs["msg"]) # Display 'Hi!' message: message_box(execute_script("scripts/hi.py")) # scripts/hi.py: # return_value = "Hi!"
- props(name=None, value=None)
Get or set the value of a PME Property.
- Parameters:
name (str) – Name of the property.
value – New value of the property.
- Returns:
PME property container if
name
isNone
, property value if onlyname
is given,True
if setting a value.
Example:
# Get property value using string notation value = props("MyProperty") # Alternative: get property using attribute notation value = props().MyProperty # props() returns property container # Set property value using string notation props("MyProperty", value) # Alternative: set property using attribute notation props().MyProperty = value # props() returns property container
- paint_settings()
Retrieve the context-sensitive paint settings.
- Returns:
The current paint settings or
None
if not in a paint mode.
Example:
ps = paint_settings(); ps and L.template_ID_preview(ps, 'brush')
- find_by(collection, key, value)
Find the first item in
collection
wherekey
equalsvalue
.- Returns:
Collection item if found, otherwise
None
.
Example:
m = find_by(C.active_object.modifiers, "type", 'SUBSURF')
- setattr(object, name, value)
Same as Python’s built-in
setattr()
, but returnsTrue
after setting.- Returns:
True
Command Tab Functions
- open_menu(name, slot=None, **kwargs)
Open menu, pie menu, popup dialog or execute a stack key, sticky key, modal operator, or macro operator by name.
- Parameters:
name (str) – Name of the menu.
slot – Index or name of the slot for Stack Key execution.
kwargs – Arguments for Modal / Macro Operators used as local variables.
- Returns:
True
if the menu exists,False
otherwise.
Example:
# Open the menu depending on the active object's type: open_menu("Lamp Pie Menu" if C.active_object.type == 'LAMP' else "Object Pie Menu") # Call "My Stack Key" slot depending on Ctrl modifier: open_menu("My Stack Key", "Ctrl slot" if E.ctrl else "Shift slot")
- toggle_menu(name, value=None)
Enable or disable a menu.
- tag_redraw(area=None, region=None)
Redraw UI areas or regions.
- close_popups()
Close all popup dialogs.
- Returns:
True
- overlay(text, **kwargs)
Draw an overlay message.
- Parameters:
text (str) – Message to display.
kwargs –
alignment
: One of['TOP', 'TOP_LEFT', 'TOP_RIGHT', 'BOTTOM', 'BOTTOM_LEFT', 'BOTTOM_RIGHT']
. Default is'TOP'
.duration
: Duration in seconds. Default is2.0
.offset_x
: Horizontal offset. Default is10
px.offset_y
: Vertical offset. Default is10
px.
- Returns:
True
Example:
overlay('Hello PME!', offset_y=100, duration=1.0)
- message_box(text, icon='INFO', title='Pie Menu Editor')
Show a message box.
- input_box(func=None, prop=None)
Show an input box.
- Parameters:
func – Function to call with the input value.
prop (str) – Path to the property to edit.
- Returns:
True
Example:
# Rename object: input_box(prop="C.active_object.name") # Display input value: input_box(func=lambda value: overlay(value))
Custom Tab Functions
- draw_menu(name, frame=True, dx=0, dy=0)
Draw a popup dialog inside another popup dialog or a pie menu.
- operator(layout, operator, text='', icon='NONE', emboss=True, icon_value=0, **kwargs)
Similar to
UILayout.operator()
, but allows filling operator properties.- Parameters:
- Returns:
OperatorProperties
object.
Example:
operator(L, "wm.context_set_int", "Material Slot 1", data_path="active_object.active_material_index", value=0) # Same as: # op = L.operator("wm.context_set_int", text="Material Slot 1") # op.data_path = "active_object.active_material_index" # op.value = 0
- custom_icon(filename)
Get the integer value associated with a custom icon.
- Parameters:
filename (str) – Icon filename without extension, located in
pie_menu_editor/icons/
.- Returns:
The integer value of the custom icon.
Example:
L.label(text="My Custom Icon", icon_value=custom_icon("p1"))
- panel(id, frame=True, header=True, expand=None)
Draws a panel by its ID.
- Parameters:
- Returns:
True
Example:
panel("MATERIAL_PT_context_material", True, True, True)
Auto-run Scripts
PME allows you to create Python scripts that automatically execute when Blender starts.
To use this feature, place files in the pie_menu_editor/scripts/autorun
folder using any of these methods:
Direct
.py
filesFolders containing scripts
Symbolic links
Warning
Scripts in the autorun
folder are executed directly in PME’s context.
Only use scripts from trusted sources.
Add Custom Global Functions
To use custom functions in PME:
Place your script in
pie_menu_editor/scripts/autorun
folderRegister functions using
pme.context.add_global()
Example:
def hello_world():
print("Hello World")
pme.context.add_global("hello", hello_world)
The registered function hello()
becomes available in:
Command tab
Custom tab
External scripts
PME Components
PME maintains a global context that provides access to commonly used functions, variables, and user-defined additions. This context is accessible through two main interfaces:
- class pme.context
- globals: dict
Access PME’s global context dictionary. Contains:
Built-in shortcuts (
C
,D
,O
,L
, etc.)Registered custom functions and values
User data storage (
U
)
from pie_menu_editor import pme # Access globals from external scripts g = pme.context.globals props = g.get('props') user_data = g.get('U')
- add_global(key, value)
Register a custom function or value in the global context.
- Parameters:
key (str) – Name for accessing the item
value – Function or value to register
- Return type:
None
# Register a function def my_tool(): bpy.ops.mesh.select_all(action='TOGGLE') pme.context.add_global("toggle_select", my_tool) # Register a constant pme.context.add_global("MAX_ITEMS", 10) # Access from PME menus via Command tab: # toggle_select() # MAX_ITEMS
- class pme.UserData
Flexible storage for user-defined data that persists during the Blender session.
- get(name, default=None)
Get a stored value.
- Parameters:
name (str) – Data key
default – Value to return if key doesn’t exist
- Returns:
Stored value or default
- update(**kwargs)
Update multiple values at once.
U = pme.context.globals['U'] # Get UserData instance U.update(tool_state="active", count=5) print(U.tool_state) # "active"