【发布时间】:2013-11-09 19:05:52
【问题描述】:
我正在 mac osx 10.8.5 上的 python 2.7 中制作应用程序我想显示通知次数,因此使用NSUserNotificationCenter。在 Eclipse 上运行代码时会收到通知。但是,问题是when I made app using py2app, Notifications are not coming。此外,打开控制台和终止的默认错误页面即将到来。请提出一些建议,如何在 py2app 生成的 dist 中包含通知,以便它可以在任何其他机器上工作。
我的 setup.py 是
from setuptools import setup
APP=['CC4Box.py']
DATA_FILES= [('',['config.cfg'])]
OPTIONS={'iconfile':'cc.icns','argv_emulation': True,'plist':{'CFBundleShortVersionString':'1.0'}}
setup(
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app']
)
我的通知代码是:
def notify(title, subtitle, info_text, delay=0, sound=False, userInfo={}):
NSUserNotification = objc.lookUpClass('NSUserNotification')
NSUserNotificationCenter = objc.lookUpClass('NSUserNotificationCenter')
notification = NSUserNotification.alloc().init()
notification.setTitle_(title)
notification.setSubtitle_(subtitle)
notification.setInformativeText_(info_text)
notification.setUserInfo_(userInfo)
if sound:
notification.setSoundName_("NSUserNotificationDefaultSoundName")
notification.setDeliveryDate_(Foundation.NSDate.dateWithTimeInterval_sinceDate_(delay, Foundation.NSDate.date()))
NSUserNotificationCenter.defaultUserNotificationCenter().scheduleNotification_(notification)
def notificationBalloon(title,msg):
notify(title1, msg1,"", sound=False)
在 Eclipse 上,通知按预期出现,但是,导入错误会在行中产生:
NSUserNotification = objc.lookUpClass('NSUserNotification')
NSUserNotificationCenter = objc.lookUpClass('NSUserNotificationCenter')
但在终端中,这些行运行良好。
【问题讨论】:
-
当您从终端启动应用程序(即在 Terminal.app 中作为命令运行“dist/CC4Box.app/Contents/MacOS/CCBox4”)时,您是否还会收到没有更多信息的错误消息, 当前工作目录设置为运行 py2app 时的目录)
-
是的,通过终端运行时出现同样的错误。但是在 Eclipse 中运行代码时工作正常,因为我在 $PYTHONPATH 中添加了路径。不知道如何在 py2app 中为其提供路径
-
可能发生的情况是 $PYTHONPATH 设置在您运行 py2app 时未激活,因此 py2app 找不到脚本所需的模块,因此该模块不会复制到应用程序包中。
-
是的,在 Eclipse 中,我们可以设置 $PYTHONPATH,因此它工作正常。但是,对于 py2app,我想没有这样的东西来包含模块。有没有其他方法可以解决这个问题
-
你需要在运行“python setup.py py2app”的shell中设置PYTHONPATH,PYTHONPATH是python设置,不是py2app设置.
标签: python macos py2app nsusernotification nsusernotificationcenter