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?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage