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

fre*_*all 22 python macos menubar

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

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

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

也许用Python不可能?有谁知道别人怎么做?

Jar*_*red 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()
Run Code Online (Sandbox Code Playgroud)

PIC


mar*_*nas 12

wxPython将无法添加任务栏项.您可以通过使用PyObjC来执行此操作,如下所示:

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

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