How to make an menu bar (system tray) app for OSX in Python?

freeall picture freeall · Dec 17, 2011 · Viewed 12k times · Source

After having spent quite some time looking at ways to an app for the menu bar we're close to admit defeat.

We are basically just looking for an example/pointer on how to create an app that will put itself in the menu bar (the small icons next to the clock), and have a menu. Nothing fancy at all.

It feels like something that should be very easy to do, but we haven't been able to find an example that works.

Maybe it's not possible with Python? Does anyone know how others do it?

Answer

Jared picture Jared · Aug 1, 2013

An option would be to use rumps which provides a level of abstraction on top of PyObjC. I wrote it specifically for quickly generating these types of simple status bar apps.

I hope that this could help a few people out there looking for a simple, semantic solution!

A short example snippet follows. Decorators are used for registering functions as callbacks for click events and timers. There is also support for 10.8 notifications.

import rumps

class AwesomeStatusBarApp(rumps.App):
    def __init__(self):
        super(AwesomeStatusBarApp, self).__init__("Awesome App")
        self.menu = ["Preferences", "Silly button", "Say hi"]

    @rumps.clicked("Preferences")
    def prefs(self, _):
        rumps.alert("jk! no preferences available!")

    @rumps.clicked("Silly button")
    def onoff(self, sender):
        sender.state = not sender.state

    @rumps.clicked("Say hi")
    def sayhi(self, _):
        rumps.notification("Awesome title", "amazing subtitle", "hi!!1")

if __name__ == "__main__":
    AwesomeStatusBarApp().run()

pic