NSUserNotificationCenter.defaultUserNotificationCenter()使用PyInstaller返回None

时间:2014-08-08 13:36:24

标签: python macos pyinstaller pyobjc

我正在尝试将通知发送到通知中心(Mac OSX) 我正在使用PyObjC绑定来从我们的python应用程序中使用cocoa api。

我正在使用以下代码段:

import Foundation¬
import objc¬

NSUserNotification = objc.lookUpClass('NSUserNotification')¬
NSUserNotificationCenter = objc.lookUpClass('NSUserNotificationCenter')¬

notification = NSUserNotification.alloc().init()¬
notification.setTitle_("TestTitle")¬
notification.setInformativeText_("This is sample text")¬
center = NSUserNotificationCenter.defaultUserNotificationCenter()¬
center.deliverNotification_(notification)¬

当我直接从python运行时,它运行正常,并在通知中心显示通知。但是当我使用PyInstaller打包上面的程序来准备二进制文件并运行它时会出现以下错误。

AttributeError: 'NoneType' object has no attribute 'deliverNotification_'

这意味着我没有得到默认用户通知中心的对象。

有人遇到过这个问题吗?

提前致谢。

1 个答案:

答案 0 :(得分:3)

找到答案。原来我们需要CFBundleIdentifier'在App的Info.plist文件中定义的密钥,默认情况下在PyInstaller生成的plist文件中不存在。否则,应用无法访问通知中心。