Skip to main content
Ctrl+K
Omniverse Kit - Home Omniverse Kit - Home

Omniverse Kit

  • twitter
  • youtube
  • instagram
  • www
  • linkedin
  • twitch
Omniverse Kit - Home Omniverse Kit - Home

Omniverse Kit

  • twitter
  • youtube
  • instagram
  • www
  • linkedin
  • twitch

Table of Contents

omni.kit.menu.utils

  • Overview
  • Update menus
  • Layouts & Hooks
  • Menu Helpers
  • Examples
  • API (python)
    • Modules
      • omni.kit.menu.utils
        • Submodules
          • actions
          • app_menu
          • builder_utils
            • Functions
              • create_prebuild_entry
              • get_menu_name
              • has_delegate_func
          • debug_window
          • extension_window_helper
          • extension_window_helper_full
          • layout
          • utils
        • Classes
          • ActionMenuSubscription
          • AppMenu
          • IconMenuDelegate
          • LayoutSourceSearch
          • MenuActionControl
          • MenuAlignment
          • MenuHelperExtension
          • MenuHelperExtensionFull
          • MenuHelperWindow
          • MenuItemDescription
          • MenuItemOrder
          • MenuLayout
          • MenuState
          • MenuUtilsDebugExtension
          • MenuUtilsExtension
          • PrebuiltItemOrder
        • Functions
          • add_action_to_menu
          • add_hook
          • add_layout
          • add_menu_items
          • build_submenu_dict
          • get_action_path
          • get_debug_stats
          • get_instance
          • get_menu_layout
          • get_merged_menus
          • rebuild_menus
          • refresh_menu_items
          • remove_hook
          • remove_layout
          • remove_menu_items
          • replace_menu_items
          • set_default_menu_priority
  • Changelog
  • Menu Helpers

Menu Helpers#

Requires omni.kit.menu.utils version 1.5.8 or above

MenuHelperExtension#

  • This helper assists with menu creation but minimal window creation help, adds menu_startup(), menu_shutdown() & menu_refresh() functions by MenuHelperExtension subclass. Allowing user to control window open/closing. But does require ui.Workspace.set_show_window_fn to be set as it uses this to open/close/get state for the window

NOTE: MenuHelperExtension only supports one window/menu item and no sub-menus, for these features use MenuHelperExtensionFull (see below for usage examples).

from omni.kit.menu.utils import MenuHelperExtension

class ActionsExtension(omni.ext.IExt, MenuHelperExtension):
    def on_startup(self):
        self._actions_window = None
        ui.Workspace.set_show_window_fn(ActionsExtension.WINDOW_NAME, self.show_window)
        self.menu_startup(ActionsExtension.WINDOW_NAME, ActionsExtension.WINDOW_NAME, ActionsExtension.MENU_GROUP)
        ui.Workspace.show_window(ActionsExtension.WINDOW_NAME, False)

    def on_shutdown(self):
        self.menu_shutdown()
        ui.Workspace.set_show_window_fn(ActionsExtension.WINDOW_NAME, None)
        if self._actions_window:
            self._actions_window.destroy()
            self._actions_window = None

    def show_window(self, visible: bool):
        if visible:
            self._actions_window = ui.Window(ActionsExtension.WINDOW_NAME)
            self._actions_window.set_visibility_changed_fn(self._visiblity_changed_fn)
            self.menu_refresh()
        elif self._actions_window:
            self._actions_window.visible = False

    def _visiblity_changed_fn(self, visible):
        # tell omni.kit.menu.utils that actions window menu open/close state needs updating
        self.menu_refresh()

Building window widgets can be done by sub-classing _show function, although it’s recommended that this should be done by sub-classing ui.Window and adding a frame build_fn via self.frame.set_build_fn(self._build_ui)

    def _show(self):
        super()._show()

        if self._window:
            with self._window.frame:
                with ui.VStack(height=0, spacing=8):
                    with ui.HStack(height=460):
                        ui.Label("myWindow")

MenuHelperExtensionFull#

  • This helper assists with menu creation and window creation, handles show/hide and menu state updating. Adds menu_startup(), menu_shutdown() & menu_refresh() functions by MenuHelperExtensionFull subclass, all user has-to provide a function call to create the window.

from omni.kit.menu.utils import MenuHelperExtensionFull

class OscilloscopeWindowExtension(omni.ext.IExt, MenuHelperExtensionFull):
    def on_startup(self):
        self.menu_startup(lambda: ui.Window("Audio Oscilloscope", width=512, height=540), "Audio Oscilloscope", "Oscilloscope", "Window")
        ui.Workspace.show_window("Audio Oscilloscope", True)

    def on_shutdown(self):
        self.menu_shutdown()

or

from omni.kit.menu.utils import MenuHelperExtensionFull, MenuHelperWindow

class OscilloscopeWindowExtension(omni.ext.IExt, MenuHelperExtensionFull):
    def on_startup(self):
        self.menu_startup(lambda: MenuHelperWindow("Audio Oscilloscope", width=512, height=540), "Audio Oscilloscope", "Oscilloscope", "Window")
        ui.Workspace.show_window("Audio Oscilloscope", True)

    def on_shutdown(self):
        self.menu_shutdown()

Example using sub-menu#

from omni.kit.menu.utils import MenuHelperExtensionFull, MenuHelperWindow

class OscilloscopeWindowExtension(omni.ext.IExt, MenuHelperExtensionFull):
    def on_startup(self):
        self.menu_startup(lambda: MenuHelperWindow("Audio Oscilloscope", width=512, height=540), "Audio Oscilloscope", "Oscilloscope", "Window/Audio")
        ui.Workspace.show_window("Audio Oscilloscope", True)

    def on_shutdown(self):
        self.menu_shutdown()

Example using sub-menus, multiple windows & menus#

import omni.ui as ui
import omni.ext
from omni.kit.menu.utils import MenuHelperExtensionFull, MenuHelperWindow

class OscilloscopeMultiWindowExtension(omni.ext.IExt, MenuHelperExtensionFull):
    class MyWindow(MenuHelperWindow):
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            self.frame.set_build_fn(self.__build)

        def __build(self):
            with ui.VStack(height=0):
                with ui.HStack(height=20):
                    ui.Label(f"Hello world from {self.title}")

    def on_startup(self):
        for index in range(0,10):
            self.menu_startup(lambda i=index: OscilloscopeMultiWindowExtension.MyWindow(f"Audio Oscilloscope {i}", width=300, height=150),
                              f"Audio Oscilloscope {index}",
                              f"Audio Oscilloscope {index}",
                              "Window/Audio",
                              verbose=True)

        ui.Workspace.show_window(f"Audio Oscilloscope 0", True)

    def on_shutdown(self):
        self.menu_shutdown()

Example using separators - Requires version 2.2.0 or above#

import omni.ext
import omni.ui as ui


import omni.ui as ui
import omni.ext
from omni.kit.menu.utils import MenuHelperExtensionFull, MenuHelperWindow

class ExampleMultiWindowExtension(omni.ext.IExt, MenuHelperExtensionFull):
    class MyWindow(MenuHelperWindow):
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            self.frame.set_build_fn(self.__build)

        def __build(self):
            with ui.VStack(height=0):
                with ui.HStack(height=20):
                    ui.Label(f"Hello world from {self.title}")

    def on_startup(self):
        menus = [
            ("", "Actor Simulation and SDG"),
            "Actor SDG",
            "Command Injection",
            "Command Setting",
            ("", "Object Simulation and SDG"),
            "Object SDG",
            "Distribution Visualizer",
            "VLM Scene Captioning",
            ("", "Physical Space Event Generation"),
            "Event Scene Tagger",
            "Event Config File",
        ]

        group = "Window/Simulation"
        for index, menu in enumerate(menus):
            if isinstance(menu, tuple):
                self.menu_startup(None, "", "", group, argv={"header": menu[1]})
            else:
                self.menu_startup(lambda i=index: ExampleMultiWindowExtension.MyWindow(menu, width=300, height=150),
                                  menu,
                                  menu,
                                  group,
                                  verbose=True)

            ui.Workspace.show_window("Command Injection", True)

    def on_shutdown(self):
        self.menu_shutdown()

previous

Layouts & Hooks

next

Examples

On this page
  • MenuHelperExtension
  • MenuHelperExtensionFull
  • Example using sub-menu
  • Example using sub-menus, multiple windows & menus
  • Example using separators - Requires version 2.2.0 or above
NVIDIA NVIDIA

Copyright © 2019-2025, NVIDIA Corporation.

Last updated on Oct 09, 2025.