当前位置: 首页 > 面试题库 >

使用PyObjC与Mountain Lion的通知中心一起使用

伊裕
2023-03-14
问题内容

我正尝试从我的python脚本向Mountain
Lion发送通知,并对点击通知做出反应。到目前为止,发送通知的工作非常完美。但是,我仍然无法让Lion单击一次来回叫我的脚本。

这是我的工作。我实现了一个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_()在单击通知时会被调用。不幸的是,这永远不会发生。我究竟做错了什么?


问题答案:

好,找到了。没有跑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"]])


 类似资料:
  • 本文向大家介绍iOS NSNotificationCenter通知中心使用小结,包括了iOS NSNotificationCenter通知中心使用小结的使用技巧和注意事项,需要的朋友参考一下 前言 最近公司组织两个星期的新人培训,事情安排的满满的,周末都没有。说好的一个星期一更新的博客中断了,让大家久等了,现在培训结束,终于又可以安安静静的做一个程序员了,好开心。。。 一、NSNotificati

  • 问题内容: 我正在尝试创建一个通用类以与Google Gson一起使用。我已经创建了课程。此类具有以下方法: 目标是该方法应该能够与我设置了GsonJsonConverterImplementation的任何Type一起使用。不幸的是,它不起作用,也不能代替T 使用。我确信问题是由于我对Java泛型类型缺乏理解而引起的。在Gson上使用泛型的正确方法是什么? 使用Kris的答案进行 编辑,我认为这

  • 泛型lambdas能利用“替换失败不是错误”规则吗?例子 是否有任何解决方法或计划将其包含在语言中?此外,由于通用lambda是引擎盖下的模板化函数对象,因此无法做到这一点不是有点奇怪吗?

  • 我正在尝试使用Azure通知中心向客户端发送推送通知。我读了这篇文章,它使用标签来识别每个用户。 https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-aspnet-backend-windows-dotnet-notify-users/ 它可以完成这项工作,但标记的数量有限。我正在考虑存储和使用中心返

  • 问题内容: 只是一个让我烦恼的快速问题:为什么要集中精力 确实可以 但当显示设置为 谢谢答案 问题答案: 我的理解如下(尽管我很高兴得到纠正)。 内联元素不具有width属性,因此 无法 计算“自动” 。 块元素具有width属性,因此 可以 计算“自动”的宽度。 内联块元素的外部充当内联,但内部充当块。这样,宽度集的作用类似于内联元素中单词的宽度。

  • 我有一个烧瓶服务器运行在http://127.0.0.1:5000和一个vuejs前端运行http://localhost:8080我已经做了api,并用postman测试了它,一切都如预期的那样工作:( > 将请求发布到/登录- (将请求发送至/登录)- 烧瓶API代码: 登录。vue: 指数vue 当我使用邮递员登录时,我得到的响应为;当我使用邮递员获取url/索引时,我得到响应。数据但当我使

  • 我正在使用Amazon SNS Mobile Push。我们的第一个推送通知实施将通过Google Cloud Messaging(GCM)在Android上实现。 到目前为止,我们的设备endpoint注册工作流程运行良好: 这里没有问题!但是,我要问的问题是:在使用Amazon SNS Mobile Push时,我们如何支持跨多个设备安装应用程序的用户? GCM将这种功能称为用户通知。 鉴于我

  • 问题内容: UPDATE 3 下面的最终工作代码。您需要src文件夹中的ace.js!从库中无法使用,您需要从其站点下载预包装的版本。 上面的代码可以设置ACE窗口的内容。 更新2 这是我的项目看起来像atm的样子,仍然在右上角显示了白色的屏幕,并带有来自WT的红色“正在加载…”消息。下面有更多注释。 当用于编辑器-> doJavaScript(command)时,“ command”变量等于以下