Python、Mac OS X NSUserNotification、操作按钮
我在理解如何使用Python获取NSUserNotification的操作按钮时遇到了一些问题。我想我知道当用户点击按钮时会调用“userNotificationCenter\u didActivateNotification\u”吗 但是,我不知道如何接收通知并使用它来调用自定义方法——我使用对os.system(“say”)的调用作为测试 我尝试过将类的委托设置为self,但似乎没有什么不同 任何想法都将不胜感激 干杯 亚当 这是我作为一个类所拥有的,当某件事情完成时,我从另一个脚本调用它:Python、Mac OS X NSUserNotification、操作按钮,python,macos,nsusernotification,Python,Macos,Nsusernotification,我在理解如何使用Python获取NSUserNotification的操作按钮时遇到了一些问题。我想我知道当用户点击按钮时会调用“userNotificationCenter\u didActivateNotification\u”吗 但是,我不知道如何接收通知并使用它来调用自定义方法——我使用对os.system(“say”)的调用作为测试 我尝试过将类的委托设置为self,但似乎没有什么不同 任何想法都将不胜感激 干杯 亚当 这是我作为一个类所拥有的,当某件事情完成时,我从另一个脚本调用它:
#!/usr/bin/env python
import Foundation, objc
import AppKit
import sys
import os
import logging
from Foundation import NSUserNotification
from Foundation import NSUserNotificationCenter
from optparse import OptionParser
class Notification_osx:
def __init__(self, item,proyecto):
self.item = item
notification = NSUserNotification.alloc().init()
notification.setTitle_("Notification: " + proyecto)
notification.setSubtitle_("Un archivo nuevo esta disponible:")
notification.setInformativeText_(item)
notification.setHasActionButton_(True);
notification.setActionButtonTitle_("Donde?")
home = os.path.expanduser("~")
LOG_FILENAME = os.path.join(home,'Desktop','sync.log')
logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG)
logging.debug(notification.description)
# notification.setUserInfo_({"action":"open_url", "value":item})
# if options.sound:
# notification.setSoundName_("NSUserNotificationDefaultSoundName")
center = NSUserNotificationCenter.defaultUserNotificationCenter()
center.setDelegate_(self)
center.deliverNotification_(notification)
# center.didActivateNotification_(notification)
def userNotificationCenter_shouldPresentNotification_(self, center, notification):
os.system("say hola")
return True
def userNotificationCenter_didDeliverNotification_(self, center, notification):
os.system("say hola")
def userNotificationCenter_didActivateNotification_(self, center, notification):
# userInfo = notification.userInfo()
os.system("say hola")
我能够用这个代码获得通知激活,但不确定它是否回答了您的问题,因为您似乎有一个操作按钮
import Foundation, objc
NSUserNotification = objc.lookUpClass('NSUserNotification')
NSUserNotificationCenter = objc.lookUpClass('NSUserNotificationCenter')
NSObject = objc.lookUpClass('NSObject')
class NotificationDelegator(NSObject):
def userNotificationCenter_didActivateNotification_(self, center, notification):
print "user notification center"
def userNotificationCenter_shouldPresentNotification_(self, center, notification):
return True
delegator = NotificationDelegator.alloc().init()
def notify(title, subtitle, info_text, delay=1, sound=False, userInfo={}):
""" Python method to show a desktop notification on Mountain Lion. Where:
title: Title of notification
subtitle: Subtitle of notification
info_text: Informative text of notification
delay: Delay (in seconds) before showing the notification
sound: Play the default notification sound
userInfo: a dictionary that can be used to handle clicks in your
app's applicationDidFinishLaunching:aNotification method
"""
notification = NSUserNotification.alloc().init()
notification.setTitle_(title)
notification.setSubtitle_(subtitle)
notification.setInformativeText_(info_text)
notification.setUserInfo_(userInfo)
if sound:
notification.setSoundName_("NSUserNotificationDefaultSoundName")
center = NSUserNotificationCenter.defaultUserNotificationCenter()
center.setDelegate_(delegator)
center.deliverNotification_(notification)