Работа с центром уведомлений Mountain Lion с использованием PyObjC

Я пытаюсь отправить уведомления Mountain Lion из моего сценария python и реагировать на клики на уведомлениях. Отправка уведомлений отлично работает. Но все же я не смог заставить Лев перезвонить моему сценарию по щелчку.

Вот что я делаю. Я применил класс Notification. Единственная цель экземпляра этого класса – предоставить уведомления, вызвав notify() . В том же методе я установил объект делегатом приложения.

 import Foundation import objc import AppKit class MountainLionNotification(Foundation.NSObject, Notification): def notify(self, title, subtitle, text, url): NSUserNotification = objc.lookUpClass('NSUserNotification') NSUserNotificationCenter = objc.lookUpClass('NSUserNotificationCenter') notification = NSUserNotification.alloc().init() notification.setTitle_(str(title)) notification.setSubtitle_(str(subtitle)) notification.setInformativeText_(str(text)) notification.setSoundName_("NSUserNotificationDefaultSoundName") notification.setUserInfo_({"action":"open_url", "value":url}) AppKit.NSApplication.sharedApplication().setDelegate_(self) NSUserNotificationCenter.defaultUserNotificationCenter().scheduleNotification_(notification) def applicationDidFinishLaunching_(self, sender): userInfo = sender.userInfo() if userInfo["action"] == "open_url": import subprocess subprocess.Popen(['open', userInfo["value"]]) 

Теперь я ожидал, что applicationDidFinishLaunching_() будет вызван щелчком по уведомлению. К сожалению, этого никогда не произойдет. Что я делаю не так?

  • Раздражающее сообщение при открытии окон из Python на OS X 10.8
  • Отладчик pydev: не удалось найти реальное местоположение для python 2.7 после обновления ОС 10.8
  • env: python \ r: Нет такого файла или каталога
  • Ошибка при установке Pygame на Mountain Lion
  • Scrapy: невозможно создать проект
  • Запуск сценария Python с Launchd: импорт не найден
  • One Solution collect form web for “Работа с центром уведомлений Mountain Lion с использованием PyObjC”

    Хорошо, нашел. Не удалось запустить AppHelper.runEventLoop() . Очевидно, ошибка facepalm. Следующий код работает:

     class MountainLionNotification(Foundation.NSObject, Notification): def notify(self, title, subtitle, text, url): NSUserNotification = objc.lookUpClass('NSUserNotification') NSUserNotificationCenter = objc.lookUpClass('NSUserNotificationCenter') notification = NSUserNotification.alloc().init() notification.setTitle_(str(title)) notification.setSubtitle_(str(subtitle)) notification.setInformativeText_(str(text)) notification.setSoundName_("NSUserNotificationDefaultSoundName") notification.setHasActionButton_(True) notification.setOtherButtonTitle_("View") notification.setUserInfo_({"action":"open_url", "value":url}) NSUserNotificationCenter.defaultUserNotificationCenter().setDelegate_(self) NSUserNotificationCenter.defaultUserNotificationCenter().scheduleNotification_(notification) def userNotificationCenter_didActivateNotification_(self, center, notification): userInfo = notification.userInfo() if userInfo["action"] == "open_url": import subprocess subprocess.Popen(['open', userInfo["value"]]) 
    Python - лучший язык программирования в мире.