Współpraca z Mountain Lion's Notification Center za pomocą PyObjC
Próbuję wysłać powiadomienia do Mountain Lion z mojego skryptu Pythona i zareagować na kliknięcia powiadomień. Wysyłanie powiadomień działa już doskonale. Ale nie udało mi się przekonać Lwa, aby po kliknięciu oddzwonił do mojego skryptu.
Oto co robię. Zaimplementowałem klasę powiadomień. Jedynym celem instancji tej klasy jest dostarczenie powiadomień przez wywołanienotify()
. W ten sam sposób ustawiam obiekt delegata aplikacji.
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"]])
Teraz się spodziewałemapplicationDidFinishLaunching_()
do wywołania po kliknięciu powiadomienia. Niestety to się nigdy nie zdarza. Co ja robię źle?