Pop-up Dialog Editor

Pop-up Dialog creates a small popup UI from buttons, properties, sliders, and checkboxes arranged in rows and columns. Unlike Pie Menu and Regular Menu, it lets you design the layout yourself.

Configuration guide — features, combinations, and uses (for AI)

Name: Popup Dialog / Type ID: DIALOG. Combines actions and settings in rows and columns, displayed as a dialog or popup. Supports Command / Property / Menu / Hotkey / Custom with additional rows and columns.

  • Assignments: Property provides an RNA-path widget, Command executes Python, and Custom draws using Blender’s UILayout.

  • Menu combinations: open other menus or expand Regular Menu / Popup Dialog contents. Property / Property Stack references place settings widgets.

  • Placement: open from a hotkey, expand inside a Pie Menu, or extend an existing Panel / Header. Distinguish the dialog’s own settings from width and position on the referencing slot.

  • Design: decide row/column layout separately from popup Mode. Check opening the UI and executing its buttons in the target context separately.

See layout for rows and columns, Extend Target for insertion, and Advanced settings for display options.

Interface and editing workflow

Viewport Display Menu example in a Blender 5.2 / PME 2.1 development environment.
  1. Name and basic controls

  2. Extend Target

  3. Advanced settings

  4. Keymap / Hotkey

  5. Menu slots and layout

Set the name, availability, and invocation method, then build the contents with slots.

Name and basic controls

Viewport Display Menu name, enabled state, preview, and advanced settings controls.
Name and basic controls in this example.

Controls include enabled state, preview, menu selection, name, tags, documentation, and advanced settings. See selected menu settings.

Keymap / Hotkey

Viewport Display Menu Keymap and Hotkey settings: where and how to invoke it.
Keymap / Hotkey settings in this example.

Keymap selects where the dialog is available; Hotkey sets the key and modifiers. Open Mode determines the trigger action. See the shared Hotkey settings.

Extend Target

Extend Target set to TOPBAR_HT_upper_bar, with insertion side, right-region toggle, and display order.

Example with TOPBAR_HT_upper_bar as the destination.

The row below the top bar inserts this Pop-up Dialog into an existing Blender panel or header.

Added in version 2.0.0: Redesigned Extend Panel / Extend Header so multiple Pop-up Dialogs / Regular Menus can share a Target.

Extend Target:

Destination Blender class ID, with search. Paste the string obtained through Interactive Panels’ Copy Panel ID. When unset, the dialog works as an ordinary hotkey-invoked popup.

Side:

Insertion position. Prepend adds at the start; Append adds at the end. The image uses left and right triangle buttons.

R:

Appears only for TOPBAR_HT_ targets and toggles insertion into the TOPBAR header’s right region.

Order:

Display order for menus sharing a Target. Lower values draw first.

See Interactive Panels and Extend Panel for the insertion workflow.

Advanced settings

Viewport Display Menu advanced settings: description, availability, display mode, width, and property alignment.
Advanced settings in this example.

Description and Poll set the tooltip and availability. Dynamic Python descriptions are also supported. See the shared advanced settings.

Added in version 2.1: Property Split aligns labels and input fields. In addition to the whole-menu setting, individual items can override it.

Property Split separates property names from values; Property Decorators controls animation-related decorations.

Display modes

Popup Dialog mode settings

Choose one of three modes for the popup’s appearance and closing behavior.

Mode comparison

Mode

Pie

Dialog

Popup

Closes when the mouse leaves the popup

Closes after interacting with a widget

OK button

Movable

Customizable width

Layout

Build a Pop-up Dialog UI with Blender’s row-and-column layout system.

Slots become widgets such as buttons or properties. Split rows into columns and add subcolumns or subrows as needed. Adding, removing, and reordering slots changes the popup layout.

Layout demonstration

In the editor, divide a row into columns, then add subcolumns and subrows as needed.

To add a subcolumn, open an item’s menu with LMB and select the Column separator. Use Begin Subrow and End Subrow in the menu to add subrows inside a column.

A Custom slot can use Python layout APIs directly to draw widgets in place of a default button.

This video by original author roaoao demonstrates combining rows and columns. Its UI is from an older version, but it shows how to build a complex layout.

Popup Dialog with Complex Layout

Expand the layout in a parent popup

Layout expansion settings

When a Pie Menu or Pop-up Dialog slot references this dialog, choose between opening a separate popup and expanding its layout in the calling menu. Enable Expand Popup Dialog in the calling slot’s Menu tab for expansion.

Fixed columns

Fixed columns demonstration

Fixed Columns gives columns equal widths. It does not set a width in pixels.

Alignment

Alignment demonstration

For an unsplit row without columns, choose left, center, or right horizontal button alignment.


Edit slots and rows

Slot contents

Sets the Python code evaluated when the item is executed. When calling an operator, use one that supports the current editor, mode, and selection.

# Add a cube in the 3D Viewport's Object Mode
bpy.ops.mesh.primitive_cube_add()

Writing commands

The input limit is 1,024 UTF-8 bytes. Text containing multibyte characters reaches the limit sooner than 1,024 characters. Separate short simple statements with ;; do not mechanically flatten indented blocks into one line. See Code Input and Execution for checking length and moving code into an external script.

Global variables

Examples of available globals:

  • C: the context PME provides to scripts

  • O: bpy.ops (Blender operators)

  • E: event information

See Scripting Reference for details.

Specify an object property path to display it as a widget. For example, bpy.context.object.location displays and edits the object’s location.

Tool settings referenced with tool_props() appear only when available in the target editor, mode, and tool. Otherwise they are hidden. Use the Custom tab to specify your own display conditions or alternative content. See the API reference for the function’s arguments.

Advanced property operations

Use Property Editor when you need indexing or more complex property operations.

When clicked, calls another menu item created in PME. Examples:

  • Display a Popup Dialog with Expand Popup Dialog

  • Display a Regular Menu with Open on Mouse Over

  • Run a Macro Operator

When clicked, finds and executes the operator assigned to the specified Blender hotkey. For example, use Blender’s standard G for Move or R for Rotate.

Sets Python code evaluated when the UI is drawn. L is the layout object; use Blender’s layout API to build the UI. This code also runs on redraw. Place buttons for actions such as adding or removing objects, rather than performing those actions directly while drawing.

# Display a label inside a box
L.box().label(text="Add Mesh")
# Arrange several buttons vertically
col = L.column(); col.operator("mesh.primitive_cube_add", text="Cube"); col.operator("mesh.primitive_uv_sphere_add", text="Sphere")

These are two independent examples. To place several UI elements in one Pie Menu slot, wrap them in a single column or box as in the second example. Adding multiple elements directly to the pie layout can shift subsequent slots to different directions.

The input limit is 1,024 UTF-8 bytes. See Code Input and Execution for length limits, multiline code, and external scripts.

Add a slot preset

PME Slot Examples

Use the rightmost hamburger menu () to add one of the supplied slot functions.


The menu opened from a slot button edits its content, icon, and position. The menu at the right end of a row controls the whole row’s size, spacing, insertion, and movement. Items vary by slot type and row structure.

Slot actions (PDI)

Ordinary slot action menu with Edit Slot, Change Icon, Visible, add/copy/move actions, Separator, and Alignment.

An ordinary slot named Button 1.

Item

Action and availability

Edit Slot

Edits the slot’s contents.

Change Icon

Changes its icon.

Hide Text

Hides the label, leaving only the icon. Available for slots with an icon and for Property slots.

Visible

Toggles slot visibility.

Go to Linked Menu

Opens the referenced menu for editing. Shown for linked Menu slots; disabled for missing or invalid references.

← Add Slot / → Add Slot

Adds a slot to the left / right of the selected slot.

Split Row

Splits before this slot. Available after the first slot in an ordinary row without columns or alignment.

Copy Slot / Paste Slot

Copies a slot / pastes copied content. Paste Slot appears when a slot has been copied.

Move Slot

Chooses a destination. Not shown in a Panel Row header.

Enabled / Disabled

Toggles enabled state. The label reflects the current state.

Remove Slot / Remove Row

Removes the slot. If it is the only slot, removes the row instead; available when other rows exist.

The groups on the right control separators and alignment before the slot.

Group

Items and meaning

Separator

None: no separator. Spacer: adds preceding space except at the row start. Column: starts a new column; unavailable in Panel Row headers, aligned rows, and similar cases.

Column

Begin Subrow / End Subrow: sets or clears the start/end of a horizontal subrow inside a column. Available according to the current structure in ordinary rows with columns.

Alignment

Left / Center / Right: establishes alignment relative to this position. Available in rows without columns. Clear removes existing row alignment.

Row actions (PDR)

Ordinary row menu with Size, Spacer, Fixed Buttons, add row/panel actions, Join Row, copy, move, and remove.

Ordinary row action menu.

Item

Action and availability

Size

Chooses row height and scope. See the size settings below.

Spacer

Chooses space above the row and scope. Not shown for the first row.

Fixed Buttons

Equalizes button widths in a row without columns, or a subrow inside a column.

Fixed Columns

Equalizes column widths. Available for rows with columns; does not enter a fixed pixel width.

Add Row Above / Below

Adds an ordinary row above / below the current row.

Add Panel Above / Below

Adds a Panel Row above / below the current row. Requires Blender panel-layout support.

Join Row

Joins the next ordinary row into this row. Unavailable if there is no next row or it is a Panel Row. Column and alignment separators in the joined rows are also removed.

Copy Row / Paste Row

Copies a row / inserts a copied row before the current one. Paste Row appears when a row has been copied.

Move Row

Chooses a destination for the entire row.

Remove Row

Removes the entire row. Available when other rows exist.

Size — height and scope

Size submenu with Normal, Large, and Larger for Row, Aligned Rows, and All Rows.

Normal / Large / Larger use 1 / 1.25 / 1.5 times the standard height. Row affects the current row, Aligned Rows affects a contiguous group without spacing, and All Rows affects every row.

Spacer — space between rows

Spacer submenu with None, Normal, Large, and Larger for Row and All Rows.

None / Normal / Large / Larger selects progressively wider spacing. Row affects space above the current row; All Rows affects gaps between all rows. Row’s None can be unavailable for adjacent rows containing columns.

Panel body actions (PDI)

Panel body menu with Edit Panel Target, Go to Panel Content, Default Closed, Header Layout, and panel row copy/move/remove actions.

Item

Action and availability

Edit Panel Target

Sets or changes the dialog used for panel contents.

Go to Panel Content

Opens the referenced dialog for editing when the reference is valid.

Default Closed

Starts the panel collapsed.

Header Layout

Places slots in the panel header. Enabling it adds an initial header slot if needed.

Copy Panel Row / Paste Row

Copies the entire panel row / inserts a copied row before it. Paste Row appears when a row has been copied.

Move Panel Row

Chooses a destination for the entire panel row.

Remove Panel Row

Removes the panel row. Available when other rows exist.

Turning Header Layout off retains existing header slots but leaves them inactive. Their menu offers Enable Header Layout to reuse them and Delete Inactive Header to remove them.

Panel row actions (PDR)

Panel Row menu with Header Layout, Spacer, ordinary/panel row insertion, copy, move, and remove.

Panel Row is the row-type heading. This menu manages placement of the entire panel.

Item

Action and availability

Header Layout

Toggles use of header slots.

Spacer

Sets space above the panel row. Available after the first row.

Add Row Above / Below

Adds an ordinary row above / below.

Add Panel Above / Below

Adds another panel row above / below.

Copy Panel Row / Paste Row

Copies the panel row / inserts a copied row before it. Paste Row appears when a row has been copied.

Move Panel Row / Remove Panel Row

Moves / removes the entire panel row. Removal is available when other rows exist.

Ordinary-row Size / Fixed Buttons / Fixed Columns / Join Row are not offered for panel rows.

Opening editing menus from scripts

Use bpy.ops.pme.pdi_menu('INVOKE_DEFAULT', idx=...) for slot actions and bpy.ops.pme.pdr_menu('INVOKE_DEFAULT', row_idx=...) for row actions. Both target the menu currently selected in PME.

idx is a position in the slot collection; row_idx is the row-start position in that same collection, not its visible row number. Invoke in an editing context and do not reuse stale positions after switching menus.


Inline editing hotkeys

These edit buttons and rows directly in preview or in a Pop-up Dialog opened while the editor is active.

Button actions

Button action hotkeys

Action

LMB

Ctrl

Shift

Alt

OS

Open menu

LMB

Edit button

LMB

Shift

Add button to the right

LMB

Ctrl

Add button to the left

LMB

Ctrl

Shift

Remove button

LMB

Ctrl

Alt

Change icon

LMB

Alt

Clear icon

LMB

Alt

OS

Hide text

LMB

Shift

Alt

Toggle spacer

LMB

OS

Copy button

LMB

Ctrl

OS

Paste button

LMB

Ctrl

Shift

OS

Row management

Row management actions

Action

LMB

Ctrl

Shift

OS

Open menu

LMB

Add row below

LMB

Ctrl

Add row above

LMB

Ctrl

Shift

Cycle row size

LMB

Shift

Cycle row spacer

LMB

OS


Advanced uses

A temporary alternative to the N-Panel

Collect settings in a Pop-up Dialog and invoke it by hotkey to keep them available without a permanent N-Panel presence. Property and Custom slots can use Blender’s standard widgets directly.

Open detailed settings from one Pie Menu slot

Reference the Pop-up Dialog from a Pie Menu’s Menu slot to open settings that do not fit in the pie. Enable Expand Popup Dialog to draw the layout inside the pie slot rather than in a separate popup.

Draw in another layout with draw_menu()

While open_menu() opens a standalone Pop-up Dialog, draw_menu() draws its contents into the current layout. Reuse a dialog layout in a Panel Group or another Pop-up Dialog.

draw_menu("Popup Dialog Name")
draw_menu("Popup Dialog Name", frame=True, dx=10, dy=10)

Draw an existing Blender panel in Custom

Use the panel() helper in a Custom slot’s Python layout code to embed native Blender panels. template_* widgets can also be used.

panel("VIEW3D_PT_view3d_properties", frame=True, header=True)

template_list() needs both the collection and an Int property storing the selected item index. Use an existing RNA property on the target or define your own.

Insert with Extend Panel / Extend Header

Set Extend Target to insert this Pop-up Dialog’s contents into an existing Blender panel or header. See Interactive Panels and Extend Panel.

Open a Blender editor area with popup_area

Separate from Pop-up Dialog Editor, popup_area opens an actual Blender editor area—such as Properties, Outliner, or Asset Browser—in a temporary popup window. Use it when you want an existing editor instead of building a layout yourself.

bpy.ops.pme.popup_area(area='PROPERTIES', width=600, height=800)
bpy.ops.pme.popup_area(area='ASSETS', width=1000, center=False, height=800)

Reference videos (original author’s channel)

From roaoao’s videos. These show an older interface and workflow.

Popup Dialog Editor
Popup Dialog with Panels
Popup Dialog with Custom Layout