Подтвердить что ты не робот

Как сделать приложение панели меню (системный трей) для OSX в Python?

После того, как мы потратили довольно много времени на поиск приложений для панели меню, мы близки к признанию поражения.

В основном мы просто ищем пример/указатель на то, как создать приложение, которое будет помещено в панель меню (маленькие значки рядом с часами) и иметь меню. Ничего необычного.

Похоже на то, что должно быть очень легко сделать, но мы не смогли найти пример, который работает.

Возможно, это невозможно с Python? Кто-нибудь знает, как это делают другие?

4b9b3361

Ответ 1

Параметр должен был бы использовать 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

Ответ 2

wxPython не сможет добавить элемент панели задач. Вы можете сделать это, используя PyObjC следующим образом:

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

Просто обратитесь к ссылке класса NSStatusItem, чтобы сделать материал для элемента, например. добавить меню, изменить выделенное изображение и т.д.