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

允我心安 提交于 2019-12-29 10:37:12

问题


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?


回答1:


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()




回答2:


wxPython won't be able to add a taskbar item. You can do this by instead using PyObjC like so:

from AppKit import NSStatusBar
status_item = NSStatusBar.systemStatusBar().statusItemWithLength_(-1) #NSVariableStatusItemLength
status_item.setImage_(<NSImage instance to status icon>)

Just refer to the NSStatusItem class reference to do stuff to the item, e.g. add a menu, change the highlight image, etc.




回答3:


Actually, you can use wxPython. Refer to my related answer here: how to set a menubar icon on mac osx using wx



来源:https://stackoverflow.com/questions/8544853/how-to-make-an-menu-bar-system-tray-app-for-osx-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!