使用PyInstaller时NSUserNotificationCenter.defaultUserNotificationCenter()返回None

3 投票
1 回答
506 浏览
提问于 2025-04-18 16:33

我正在尝试将通知发送到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 个回答

3

找到了解决办法。原来我们需要在应用的 Info.plist 文件中定义一个叫 'CFBundleIdentifier' 的键,但这个键在 PyInstaller 生成的 plist 文件中默认是没有的。如果没有这个键,应用就无法访问通知中心。

撰写回答