如何在Python中为OSX制作菜单栏(系统托盘)应用程序?

时间:2011-12-17 12:50:03

标签: python macos menubar

在花了很长时间寻找菜单栏应用程序的方法后,我们接近失败了。

我们基本上只是在寻找一个关于如何创建应用程序的示例/指针,该应用程序将自己置于菜单栏中(时钟旁边的小图标),并且有一个菜单。没什么好看的。

这感觉就像是应该很容易做到的事情,但是我们找不到一个有效的例子。

也许用Python不可能?有谁知道其他人是怎么做到的?

3 个答案:

答案 0 :(得分:27)

一个选项是使用rumps,它在PyObjC之上提供抽象级别。我专门编写了它来快速生成这些类型的简单状态栏应用程序。

我希望这可以帮助那些寻找简单语义解决方案的人!

下面是一个简短的示例摘录。装饰器用于将函数注册为单击事件和计时器的回调。还支持10.8通知。

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

答案 1 :(得分:12)

wxPython将无法添加任务栏项。你可以这样做,而不是像这样使用PyObjC:

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

只需参考NSStatusItem类引用即可对项目执行操作,例如:添加菜单,更改高亮图像等。

答案 2 :(得分:0)

实际上,你 可以 使用wxPython。请参阅我的相关答案:how to set a menubar icon on mac osx using wx

相关问题