Как сделать приложение панели меню (системный трей) для OSX на Python? - PullRequest
22 голосов
/ 17 декабря 2011

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

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

Такое чувство, что это должно быть очень легко сделать, но мы не смогли найти пример, который работает.

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

Ответы [ 3 ]

27 голосов
/ 01 августа 2013

Можно использовать 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

12 голосов
/ 17 декабря 2011

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

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

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

0 голосов
/ 03 апреля 2018

На самом деле, вы можете использовать wxPython. Обратитесь к моему связанному ответу здесь: как установить иконку меню на Mac OSX с помощью wx

...