Arbeiten mit dem Benachrichtigungscenter von Mountain Lion mit PyObjC
Ich versuche, Benachrichtigungen von meinem Python-Skript an Mountain Lion zu senden und auf Klicks auf die Benachrichtigungen zu reagieren. Das Versenden der Benachrichtigungen funktioniert mittlerweile einwandfrei. Trotzdem konnte ich Lion nicht dazu bringen, mein Drehbuch mit einem Klick zurückzurufen.
Hier ist was ich tue. Ich habe eine Notification-Klasse implementiert. Der einzige Zweck einer Instanz dieser Klasse besteht darin, Benachrichtigungen durch Aufrufen bereitzustellennotify()
. In der gleichen Methode setze ich das Objekt auf den Stellvertreter der App.
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"]])
Jetzt habe ich erwartetapplicationDidFinishLaunching_()
durch einen Klick auf die Benachrichtigung aufgerufen werden. Leider passiert das nie. Was mache ich falsch?