4

I got this example code form this question Using Rumps in Python and OS X Without Creating a Class

@rumps.clicked("About")
def about(sender):
    rumps.alert("This is a cool app!")

@rumps.clicked("Preferences")
def about(sender):
    rumps.alert("This is a cool app's settings!")

app = rumps.App("My Toolbar App", title='World, Hello')
app.menu = [
    rumps.MenuItem('About', icon='pony.jpg', dimensions=(18, 18)), 
    'Preferences',
]
app.run()

How do I create a submenu for About menuitem with values like, "About Me", "About the Project" etc?

Community
  • 1
  • 1
scottydelta
  • 1,786
  • 4
  • 19
  • 39

1 Answers1

2

It's pretty simple to add a submenus to rumps — all that is required is to enclose the parent menu and children items in square brackets []:

app.menu = [
    [rumps.MenuItem("About", icon='pony.jpg', dimensions=(18, 18)), 
    [rumps.MenuItem("About Me"), rumps.MenuItem("About Project"), 
    rumps.MenuItem("etc...")]], 
    None, 
    rumps.MenuItem('Preferences')
]

If you wanted to add another submenu for etc... for example you would do:

app.menu = [
    [rumps.MenuItem("About", 'icon='pony.jpg', dimensions=(18, 18)), 
    [rumps.MenuItem("About Me"), rumps.MenuItem("About Project"), 
    [rumps.MenuItem("etc..."), 
    [rumps.MenuItem("more!")]]]], 
    None, 
    rumps.MenuItem('Preferences')
]

Submenu items can also use JSON like syntax, which might be easier to manage if you have lots of children in your submenus:

app.menu = [
    rumps.MenuItem('About', icon='pony.png', dimensions=(18, 18)), 
    'Preferences',
    None,  # separator
    {'SubMenu':
        {"Child Menu One": ["Item 1", "Item 2"],
         "Child Menu Two": ["Item 1", rumps.MenuItem("Item 2")]}},
    None
]

*None acts as a separator and is entirely optional.

You can find some more examples here.

l'L'l
  • 44,951
  • 10
  • 95
  • 146