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?
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.