Examples¶
This section build the demo_model in different
applications.
menuet/demo/menu.toml
#:schema https://tahv.codeberg.page/menuet/menuet.json
[[menu]]
label = "Animation"
icon = "res:menuet.demo:lucide-clapperboard.svg"
[[menu]]
label = "Modeling"
icon = "res:menuet.demo:lucide-box.svg"
[[menu]]
label = "Development"
icon = "res:menuet.demo:lucide-code-xml.svg"
[[menu]]
label = "Rigging"
icon = "res:menuet.demo:lucide-bone.svg"
[[action]]
id = "anim-bake"
label = "Bake Animation"
menu = ["Animation"]
desc = "Bake selected character(s) animation"
[[action]]
id = "anim-fbx-exporter"
label = "FBX Animation Exporter"
menu = ["Animation", "FBX"]
desc = "Open animation exporter Window"
icon = "res:menuet.demo:lucide-file-up.svg"
[[action]]
id = "anim-fbx-importer"
label = "FBX Animation Importer"
menu = ["Animation", "FBX"]
desc = "Open animation importer Window"
icon = "res:menuet.demo:lucide-file-down.svg"
[[action]]
id = "adjustment-blending"
label = "Adjustment Blending"
menu = ["Animation"]
group = "Edit"
desc = "Perform Adjustment Blending on selected character(s)"
[[action]]
id = "tween-machine"
label = "Tween Machine"
menu = ["Animation"]
group = "Edit"
icon = "res:menuet.demo:lucide-align-horizontal-space-around.svg"
[[action]]
id = "rig-ctrl-creator"
label = "Controller Creator"
menu = ["Rigging"]
group = "Controller"
icon = "res:menuet.demo:lucide-box.svg"
[[action]]
id = "rig-ctrl-editor"
label = "Controller Editor"
menu = ["Rigging"]
group = "Controller"
icon = "res:menuet.demo:lucide-box.svg"
[[action]]
id = "rig-joint-tools"
label = "Joint Tools"
menu = ["Rigging"]
icon = "res:menuet.demo:lucide-bone.svg"
[[action]]
id = "rig-skinning-tools"
label = "Skinning Tools"
menu = ["Rigging"]
icon = "res:menuet.demo:lucide-paintbrush.svg"
[[action]]
id = "mesh-mirror"
label = "Mirror Geometry"
menu = ["Modeling"]
icon = "res:menuet.demo:lucide-flip-horizontal-2.svg"
[[action]]
id = "mesh-cleaner"
label = "Mesh Cleaner"
menu = ["Modeling"]
icon = "res:menuet.demo:lucide-brush-cleaning.svg"
[[action]]
id = "mesh-randomizer"
label = "Mesh Randomizer"
menu = ["Modeling"]
icon = "res:menuet.demo:lucide-shuffle.svg"
[[action]]
id = "dev-debugger"
label = "Start Debugger"
menu = ["Development"]
icon = "res:menuet.demo:lucide-bug.svg"
[[action]]
id = "doc-open"
label = "Open Documentation"
cb = "url:https://tahv.codeberg.page/menuet/"
icon = "res:menuet.demo:lucide-info.svg"
QApplication¶
from PySide6 import QtWidgets
from PySide6.QtCore import Qt
from menuet.builders.qt import QMenuBuilder
from menuet.demo import demo_model
app = QtWidgets.QApplication([])
app.setAttribute(
Qt.ApplicationAttribute.AA_DontShowIconsInMenus,
on=False, # show icons on macOS
)
app.setAttribute(
Qt.ApplicationAttribute.AA_DontUseNativeMenuBar,
on=False, # use macOS native menubar
)
model = demo_model()
builder = QMenuBuilder(model, root_menu="Demo")
menu = builder.build()
window = QtWidgets.QMainWindow()
window.menuBar().addMenu(menu)
window.show()
app.exec()
Windows:

macOS:

macOS native:

Blender¶
import bpy
from menuet.builders.blender import BlenderMenuBuilder
from menuet.demo import demo_model
model = demo_model()
builder = BlenderMenuBuilder(model, root_menu="Demo")
menu = builder.build()
def menu_draw(self: bpy.types.Menu, context: bpy.types.Context) -> None:
self.layout.menu(menu.bl_idname)
bpy.types.TOPBAR_MT_editor_menus.append(menu_draw)

Maya¶
Build menu under Maya main menu bar "MayaWindow".
from menuet.builders.maya import MayaMenuBuilder
from menuet.demo import demo_model
model = demo_model()
builder = MayaMenuBuilder(
model,
root_menu="Demo",
parent="MayaWindow",
)
builder.build()

Maya menus can also be built with QMenuBuilder.
Unreal¶
Build menu under Maya main menu bar "MayaWindow".
import unreal
from menuet.builders.unreal import UnrealMenuBuilder, model_reference_to_string_command
from menuet.demo import demo_model
tool_menus = unreal.ToolMenus.get()
model = demo_model()
builder = UnrealMenuBuilder(
model,
root_name="Demo",
to_string_command=model_reference_to_string_command("menuet.demo:demo_model"),
parent=tool_menus.find_menu(unreal.Name("LevelEditor.MainMenu")),
)
builder.build()

Text¶
from menuet.builders.text import Render, TextMenuBuilder
from menuet.demo import demo_model
model = demo_model()
builder = TextMenuBuilder(model, root_menu="Demo", render=Render.UTF8)
menu = builder.build()
print(menu)
Demo
├── Animation
│ ├── FBX
│ │ ├── FBX Animation Exporter
│ │ └── FBX Animation Importer
│ ├── Bake Animation
│ ├── Edit ───
│ ├── Adjustment Blending
│ └── Tween Machine
├── Development
│ └── Start Debugger
├── Modeling
│ ├── Mesh Cleaner
│ ├── Mesh Randomizer
│ └── Mirror Geometry
├── Rigging
│ ├── Joint Tools
│ ├── Skinning Tools
│ ├── Controller ───
│ ├── Controller Creator
│ └── Controller Editor
└── Open Documentation