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()

previous

Layouts & Hooks

next

Examples

On this page
  • MenuHelperExtension
  • MenuHelperExtensionFull
  • Example using sub-menu
  • Example using sub-menus, multiple windows & menus
NVIDIA NVIDIA

Copyright © 2019-2025, NVIDIA Corporation.

Last updated on Aug 12, 2025.