Contents Menu Expand Light mode Dark mode Auto light/dark, in light mode Auto light/dark, in dark mode Skip to content
SimVX documentation
SimVX documentation

Getting Started

  • Installation
  • Quickstart
  • Your First 2D Game
  • Your First 3D Game
  • Patterns
  • Examples Gallery
    • Triangle
    • Bouncing Balls
    • Rotating Cube
    • Pong
    • Platformer
    • Asteroids 2D
    • Space Invaders 2D
    • Tic Tac Toe
    • Dungeon Explorer
    • Asteroids 3D
    • Space Invaders 3D
    • Physics Sandbox
    • Pad Grid
    • Planet Explorer
    • Deep Sea Aquarium
    • Sprite
    • Tilemap
    • 2D Lighting
    • 2D Navigation
    • NinePatch
    • 2D Joints
    • 2D Path Follow
    • 2D Trail
    • 3D Lighting
    • Fog
    • IBL
    • Particles
    • Animation Blend
    • MultiMesh
    • Noise
    • Mesh Parenting
    • CSG
    • 3D Joints
    • 3D Navigation
    • Widget Showcase
    • Menus
    • Tree
  • Architecture
  • Building a Simple Game with the SimVX Editor

Core Engine

  • Core Engine
  • Node System
  • Input System
  • Animation
  • SimVX Audio System
  • UI System
  • Math Types
  • Collision & Physics
  • Scenes
  • Particles
  • TileMap
  • 2D Lighting
  • Constructive Solid Geometry
  • Navigation
  • 3D Navigation
  • Skeleton
  • Physics Engine
  • Testing
  • Package Resources
  • Save System
  • Event Bus

Graphics Backend

  • Graphics Backend
  • App Class
  • Custom Shaders
  • Visual Testing

Web

  • Web Export
  • Web export — resource channel

IDE

  • IDE

API Reference

  • API Reference
    • simvx.core
      • simvx.core.physics
        • simvx.core.physics.engine
      • simvx.core.scene_io
        • simvx.core.scene_io.loader
        • simvx.core.scene_io.source_tree
        • simvx.core.scene_io.edits
        • simvx.core.scene_io.detection
        • simvx.core.scene_io.scene_file
        • simvx.core.scene_io.scene_module
        • simvx.core.scene_io.symbols
        • simvx.core.scene_io.emitter
      • simvx.core.debug
        • simvx.core.debug.overlay
        • simvx.core.debug.ui_inspector
        • simvx.core.debug.profiler
      • simvx.core.nodes_3d
        • simvx.core.nodes_3d.path
        • simvx.core.nodes_3d.text
        • simvx.core.nodes_3d.multimesh
        • simvx.core.nodes_3d.remote_transform
        • simvx.core.nodes_3d.node3d
        • simvx.core.nodes_3d.sprite
        • simvx.core.nodes_3d.marker
        • simvx.core.nodes_3d.lights
        • simvx.core.nodes_3d.camera
        • simvx.core.nodes_3d.mesh
        • simvx.core.nodes_3d.spring_arm
      • simvx.core.input
        • simvx.core.input.events
        • simvx.core.input.map
        • simvx.core.input.state
        • simvx.core.input.enums
      • simvx.core.ui
        • simvx.core.ui.core
        • simvx.core.ui.ui_input
        • simvx.core.ui.virtual_scroll
        • simvx.core.ui.autocomplete
        • simvx.core.ui.terminal
        • simvx.core.ui.code_edit
        • simvx.core.ui.file_browser
        • simvx.core.ui.syntax_highlighter
        • simvx.core.ui.tabs
        • simvx.core.ui.colour_picker
        • simvx.core.ui.toolbar
        • simvx.core.ui.types
        • simvx.core.ui.clipboard
        • simvx.core.ui.markers
        • simvx.core.ui.split
        • simvx.core.ui.graph_edit
        • simvx.core.ui.virtual_controls
        • simvx.core.ui.testing
        • simvx.core.ui.menu
        • simvx.core.ui.containers
        • simvx.core.ui.tree
        • simvx.core.ui.code_editor_panel
        • simvx.core.ui.folding
        • simvx.core.ui.theme
        • simvx.core.ui.find_replace
        • simvx.core.ui.dock
        • simvx.core.ui.rich_text
        • simvx.core.ui.popup_manager
        • simvx.core.ui.scroll
        • simvx.core.ui.file_dialog
        • simvx.core.ui.ansi_parser
        • simvx.core.ui.widgets
        • simvx.core.ui.completion_types
        • simvx.core.ui.multiline
        • simvx.core.ui.tooltip
        • simvx.core.ui.enums
        • simvx.core.ui.advanced
      • simvx.core.text
        • simvx.core.text.msdf
        • simvx.core.text.font
      • simvx.core.math
        • simvx.core.math.matrices
        • simvx.core.math.types
        • simvx.core.math.rect2
        • simvx.core.math.aabb
        • simvx.core.math.curves
        • simvx.core.math.raycast
        • simvx.core.math.transforms
      • simvx.core.animation
        • simvx.core.animation.blend_space
        • simvx.core.animation.state_machine
        • simvx.core.animation.tween
        • simvx.core.animation.player
        • simvx.core.animation.sprite
        • simvx.core.animation.skeletal
        • simvx.core.animation.track
      • simvx.core.graphics
        • simvx.core.graphics.material
        • simvx.core.graphics.shader
        • simvx.core.graphics.mesh
      • simvx.core.navigation3d
        • simvx.core.navigation3d.server
        • simvx.core.navigation3d.nodes
        • simvx.core.navigation3d.mesh
      • simvx.core.nodes_2d
        • simvx.core.nodes_2d.path
        • simvx.core.nodes_2d.text
        • simvx.core.nodes_2d.remote_transform
        • simvx.core.nodes_2d.ninepatch
        • simvx.core.nodes_2d.node2d
        • simvx.core.nodes_2d.shapes
        • simvx.core.nodes_2d.ysort
        • simvx.core.nodes_2d.canvas
        • simvx.core.nodes_2d.marker
        • simvx.core.nodes_2d.camera
        • simvx.core.nodes_2d.trail
      • simvx.core.lsp
        • simvx.core.lsp.protocol
        • simvx.core.lsp.server
        • simvx.core.lsp.client
      • simvx.core.testing
        • simvx.core.testing.scene_runner
        • simvx.core.testing.input_sim
        • simvx.core.testing.recorder
        • simvx.core.testing.diagnostics
      • simvx.core.coroutines
      • simvx.core.audio_bus
      • simvx.core.save_manager
      • simvx.core.decal
      • simvx.core.selection
      • simvx.core.file_state
      • simvx.core.scene_tree
      • simvx.core.csg
      • simvx.core.audio_backend
      • simvx.core.cli
      • simvx.core.particles
      • simvx.core.skeleton
      • simvx.core.run
      • simvx.core.surface_tool
      • simvx.core.export
      • simvx.core.gizmo
      • simvx.core.event_bus
      • simvx.core.noise
      • simvx.core.shell_node
      • simvx.core.gpu_particles
      • simvx.core.reflection_probe
      • simvx.core.collision
      • simvx.core.tilemap
      • simvx.core.physics_nodes
      • simvx.core.clipboard
      • simvx.core.resource
      • simvx.core.atlas
      • simvx.core.particle_trail
      • simvx.core.gesture
      • simvx.core.asset_resolver
      • simvx.core.document
      • simvx.core.hot_reload
      • simvx.core.script_embed
      • simvx.core.scripted_demo
      • simvx.core.descriptors
      • simvx.core.script
      • simvx.core.light2d
      • simvx.core.project
      • simvx.core.properties
      • simvx.core.events
      • simvx.core.shapecast
      • simvx.core.audio
      • simvx.core.easing
      • simvx.core.world_environment
      • simvx.core.fog_volume
      • simvx.core.undo
      • simvx.core.clustered_lighting
      • simvx.core.navigation
      • simvx.core.render_queue
      • simvx.core.shortcuts
      • simvx.core.mesh_lod
      • simvx.core.config
      • simvx.core.node
      • simvx.core.skeleton2d
      • simvx.core.resource_loader
      • simvx.core.git_status
      • simvx.core.i18n
      • simvx.core.mesh_instance_2d
      • simvx.core.viewport
    • simvx.graphics
      • simvx.graphics.streaming
        • simvx.graphics.streaming.server
      • simvx.graphics.assets
        • simvx.graphics.assets.scene_import
        • simvx.graphics.assets.cubemap_loader
        • simvx.graphics.assets.mesh_loader
        • simvx.graphics.assets.image_loader
      • simvx.graphics.platform
      • simvx.graphics.picking
        • simvx.graphics.picking.pick_pass
        • simvx.graphics.picking.raycast_utils
        • simvx.graphics.picking.raycast
      • simvx.graphics.shaders
      • simvx.graphics.renderer
        • simvx.graphics.renderer.render_graph
        • simvx.graphics.renderer.render_pass
        • simvx.graphics.renderer.tilemap_pass
        • simvx.graphics.renderer.shadow_renderer
        • simvx.graphics.renderer.overlay_renderer
        • simvx.graphics.renderer.custom_post_process
        • simvx.graphics.renderer.outline_pass
        • simvx.graphics.renderer.gpu_batch
        • simvx.graphics.renderer.gizmo_pass
        • simvx.graphics.renderer.particle_compute
        • simvx.graphics.renderer.scene_renderer
        • simvx.graphics.renderer.grid_pass
        • simvx.graphics.renderer.draw2d_pass
        • simvx.graphics.renderer.colour_grading
        • simvx.graphics.renderer.light2d_pass
        • simvx.graphics.renderer.passes
        • simvx.graphics.renderer.game_viewport
        • simvx.graphics.renderer.viewport_manager
        • simvx.graphics.renderer.particle_pass
        • simvx.graphics.renderer.mesh_registry
        • simvx.graphics.renderer.environment_sync
        • simvx.graphics.renderer.shadow_pass
        • simvx.graphics.renderer.pass_orchestrator
        • simvx.graphics.renderer.light_cull_pass
        • simvx.graphics.renderer.shadow_math
        • simvx.graphics.renderer.text_pass
        • simvx.graphics.renderer.skybox_pass
        • simvx.graphics.renderer.point_shadow_pass
        • simvx.graphics.renderer.forward
        • simvx.graphics.renderer.bloom_pass
        • simvx.graphics.renderer.render_target
        • simvx.graphics.renderer.render_context
        • simvx.graphics.renderer.tile_types
        • simvx.graphics.renderer.ibl_pass
        • simvx.graphics.renderer.transparency
        • simvx.graphics.renderer.post_process
        • simvx.graphics.renderer.ssao_pass
        • simvx.graphics.renderer.resource_registry
        • simvx.graphics.renderer.buffer_manager
        • simvx.graphics.renderer.pipeline_manager
        • simvx.graphics.renderer.fog_pass
        • simvx.graphics.renderer.pass_helpers
      • simvx.graphics.gpu
        • simvx.graphics.gpu.swapchain
        • simvx.graphics.gpu.sync
        • simvx.graphics.gpu.timestamp_pool
        • simvx.graphics.gpu.descriptors
        • simvx.graphics.gpu.pipeline_compute
        • simvx.graphics.gpu.commands
        • simvx.graphics.gpu.pipeline
        • simvx.graphics.gpu.context
        • simvx.graphics.gpu.memory
        • simvx.graphics.gpu.device
        • simvx.graphics.gpu.instance
      • simvx.graphics.ui
        • simvx.graphics.ui.ui_pass
      • simvx.graphics.materials
        • simvx.graphics.materials.custom_shader
        • simvx.graphics.materials.texture
        • simvx.graphics.materials.material
        • simvx.graphics.materials.shader_compiler
      • simvx.graphics.scene
        • simvx.graphics.scene.frustum
        • simvx.graphics.scene.transforms
        • simvx.graphics.scene.camera
        • simvx.graphics.scene.draw_batch
      • simvx.graphics.draw2d_vertex
      • simvx.graphics.engine
      • simvx.graphics.input_adapter
      • simvx.graphics.draw2d_texture
      • simvx.graphics.app
      • simvx.graphics.debug_draw
      • simvx.graphics.testing
      • simvx.graphics.draw2d_text
      • simvx.graphics.draw2d
      • simvx.graphics.text_utils
      • simvx.graphics.text_renderer
      • simvx.graphics.draw2d_transform
      • simvx.graphics.draw2d_batch
      • simvx.graphics.scene_adapter
      • simvx.graphics.playtest_patterns
      • simvx.graphics.playtest
    • simvx.editor
      • simvx.editor.panels
        • simvx.editor.panels.scene_tree
          • simvx.editor.panels.scene_tree.dialogs
          • simvx.editor.panels.scene_tree.panel
          • simvx.editor.panels.scene_tree.type_registry
        • simvx.editor.panels.inspector_sections
          • simvx.editor.panels.inspector_sections.sections
        • simvx.editor.panels.inspector_script
        • simvx.editor.panels.status_bar
        • simvx.editor.panels.animation
        • simvx.editor.panels.file_browser
        • simvx.editor.panels.animation_editor
        • simvx.editor.panels.inspector_widgets
        • simvx.editor.panels.anchor_preset_widget
        • simvx.editor.panels.play_controls
        • simvx.editor.panels.console
        • simvx.editor.panels.code_tab
        • simvx.editor.panels.properties
        • simvx.editor.panels.property_widgets
        • simvx.editor.panels.scene3d_view
        • simvx.editor.panels.asset_browser
        • simvx.editor.panels.viewport_math
        • simvx.editor.panels.scene2d_view
        • simvx.editor.panels.section_widgets
        • simvx.editor.panels.repl_panel
        • simvx.editor.panels.profiler_panel
      • simvx.editor.testing
        • simvx.editor.testing.demo_steps
          • simvx.editor.testing.demo_steps.handlers
            • simvx.editor.testing.demo_steps.handlers.inspector
            • simvx.editor.testing.demo_steps.handlers.menu
            • simvx.editor.testing.demo_steps.handlers.nodes
            • simvx.editor.testing.demo_steps.handlers.viewport
          • simvx.editor.testing.demo_steps.steps
      • simvx.editor.game_render_hook
      • simvx.editor.play_mode
      • simvx.editor.scene_diff
      • simvx.editor.refactor_extract
      • simvx.editor.default_scenes
      • simvx.editor.export_controller
      • simvx.editor.workspace_tabs
      • simvx.editor.templates
      • simvx.editor.cli
      • simvx.editor.node_ops
      • simvx.editor.error_recovery
      • simvx.editor.plugin
      • simvx.editor.welcome
      • simvx.editor.node_catalogue
      • simvx.editor.app
      • simvx.editor.duplicate_node_dialog
      • simvx.editor.menus
      • simvx.editor.project_registry
      • simvx.editor.about_dialog
      • simvx.editor.keyboard_nav
      • simvx.editor.layout_presets
      • simvx.editor.scene_file_ops
      • simvx.editor.preferences_dialog
      • simvx.editor.project
      • simvx.editor.web_export
      • simvx.editor.make_custom_class_dialog
      • simvx.editor.script_ops
      • simvx.editor.save_dialog
      • simvx.editor.project_settings_dialog
      • simvx.editor.extract
      • simvx.editor.error_nav
      • simvx.editor.refactor_inline
      • simvx.editor.theme
      • simvx.editor.export_dialog
      • simvx.editor.live_file_ops
      • simvx.editor.project_classes
      • simvx.editor.command_palette
      • simvx.editor.root
      • simvx.editor.state
      • simvx.editor.ide_bridge
      • simvx.editor.config
      • simvx.editor.main
      • simvx.editor.commands
      • simvx.editor.gizmo_manipulator
      • simvx.editor.hints
      • simvx.editor.input_map_dialog
      • simvx.editor.unsaved_class_warning_dialog
      • simvx.editor.autosave
      • simvx.editor.rename_class_dialog
    • simvx.ide
      • simvx.ide.widgets
        • simvx.ide.widgets.status_bar
        • simvx.ide.widgets.autocomplete
        • simvx.ide.widgets.goto_line
        • simvx.ide.widgets.minimap
        • simvx.ide.widgets.confirm_dialog
        • simvx.ide.widgets.command_palette
      • simvx.ide.panels
        • simvx.ide.panels.terminal_panel
        • simvx.ide.panels.symbol_outline
        • simvx.ide.panels.settings_panel
        • simvx.ide.panels.output_panel
        • simvx.ide.panels.file_browser
        • simvx.ide.panels.debug_panel
        • simvx.ide.panels.problems_panel
        • simvx.ide.panels.search_panel
      • simvx.ide.dap
        • simvx.ide.dap.client
      • simvx.ide.lint
        • simvx.ide.lint.runner
      • simvx.ide.lsp
        • simvx.ide.lsp.client
      • simvx.ide.debug_session
      • simvx.ide.language_server
      • simvx.ide.file_tabs
      • simvx.ide.app
      • simvx.ide.state
      • simvx.ide.edit_actions
      • simvx.ide.embedded
      • simvx.ide.keybindings
      • simvx.ide.config
      • simvx.ide.playtest
Back to top
View this page

Menus¶

Play Demo

Menu Bar Demo — MenuBar with PopupMenu dropdowns and z-ordering.

Shows a menu bar with File, Edit, and View menus that open above other content. A status label at the bottom echoes the last action.

Run: uv run python packages/graphics/examples/ui_menus.py

Source Code¶

  1"""Menu Bar Demo — MenuBar with PopupMenu dropdowns and z-ordering.
  2
  3Shows a menu bar with File, Edit, and View menus that open above
  4other content.  A status label at the bottom echoes the last action.
  5
  6Run: uv run python packages/graphics/examples/ui_menus.py
  7"""
  8
  9from simvx.core import (
 10    AnchorPreset,
 11    Colour,
 12    Label,
 13    MenuBar,
 14    MenuItem,
 15    Node,
 16    Panel,
 17    VBoxContainer,
 18    Vec2,
 19)
 20from simvx.graphics import App
 21
 22
 23class MenuDemo(Node):
 24    """Root node for menu bar demo scene."""
 25
 26    def ready(self):
 27        root = VBoxContainer(name="Root")
 28        root.set_anchor_preset(AnchorPreset.FULL_RECT)
 29        root.separation = 0
 30        self.add_child(root)
 31
 32        # --- Menu bar ---
 33        menubar = MenuBar(name="menubar")
 34        menubar.size = Vec2(800, 28)
 35        root.add_child(menubar)
 36
 37        status = Label("Ready")
 38        status.text_colour = Colour.LIGHT_GRAY
 39
 40        def make_action(label):
 41            def handler():
 42                status.text = f"Action: {label}"
 43
 44            return handler
 45
 46        # File menu
 47        menubar.add_menu(
 48            "File",
 49            [
 50                MenuItem(text="New", callback=make_action("New"), shortcut="Ctrl+N"),
 51                MenuItem(text="Open", callback=make_action("Open"), shortcut="Ctrl+O"),
 52                MenuItem(text="Save", callback=make_action("Save"), shortcut="Ctrl+S"),
 53                MenuItem(separator=True),
 54                MenuItem(text="Quit", callback=make_action("Quit"), shortcut="Ctrl+Q"),
 55            ],
 56        )
 57
 58        # Edit menu
 59        menubar.add_menu(
 60            "Edit",
 61            [
 62                MenuItem(text="Undo", callback=make_action("Undo"), shortcut="Ctrl+Z"),
 63                MenuItem(text="Redo", callback=make_action("Redo"), shortcut="Ctrl+Y"),
 64                MenuItem(separator=True),
 65                MenuItem(text="Cut", callback=make_action("Cut"), shortcut="Ctrl+X"),
 66                MenuItem(text="Copy", callback=make_action("Copy"), shortcut="Ctrl+C"),
 67                MenuItem(text="Paste", callback=make_action("Paste"), shortcut="Ctrl+V"),
 68            ],
 69        )
 70
 71        # View menu
 72        menubar.add_menu(
 73            "View",
 74            [
 75                MenuItem(text="Zoom In", callback=make_action("Zoom In"), shortcut="Ctrl++"),
 76                MenuItem(text="Zoom Out", callback=make_action("Zoom Out"), shortcut="Ctrl+-"),
 77                MenuItem(text="Reset Zoom", callback=make_action("Reset Zoom"), shortcut="Ctrl+0"),
 78            ],
 79        )
 80
 81        # --- Main content panel ---
 82        content = Panel(name="ContentPanel")
 83        content.size = Vec2(800, 540)
 84        content.bg_colour = Colour.hex("#1A1A2E")
 85        root.add_child(content)
 86
 87        center_label = Label("Main content area")
 88        center_label.text_colour = Colour.GRAY
 89        center_label.font_size = 16.0
 90        center_label.set_anchor_preset(AnchorPreset.CENTER)
 91        center_label.margin_left = -150
 92        center_label.margin_right = 150
 93        center_label.margin_top = -15
 94        center_label.margin_bottom = 15
 95        center_label.alignment = "center"
 96        content.add_child(center_label)
 97
 98        # --- Status bar ---
 99        status.set_anchor_preset(AnchorPreset.BOTTOM_WIDE)
100        status.margin_left = 10
101        status.margin_right = 10
102        status.margin_top = -30
103        status.margin_bottom = -10
104        content.add_child(status)
105
106
107if __name__ == "__main__":
108    app = App(title="SimVX Menu Demo", width=800, height=600)
109    app.run(MenuDemo())
Next
Tree
Previous
Widget Showcase
Copyright © 2026, SimVX Contributors
Made with Sphinx and @pradyunsg's Furo
On this page
  • Menus
    • Source Code