我一直在OS X 10.10上构建一个64位Python 3.4.2应用程序,我使用py2app 0.9捆绑为Mac应用程序。 我已经调整了应用程序的Info.plist文件,因此OS X知道我的应用程序可以打开具有特定文件名后缀的文件。
当用户在Finder中双击具有特定文件名后缀的文件时,将打开该应用程序并将双击文件的名称作为参数发送给应用程序。
如果应用程序已在运行,我双击具有匹配文件名后缀的第二个文件,则此文件名似乎不会移交给我的应用程序。
这正是我尝试实现的:无论我的应用程序是否已经运行,如果我在Finder中双击匹配的文件,它应该在我的应用程序中打开。
我已经看到py2app创建文件Contents / Resources / boot .py,它似乎捕获了Finder发送的odoc Apple Event,并将其发送到我的Python应用程序。
我在启动 .py文件中添加了一些日志记录,当我的py2app捆绑的Python应用程序已经运行时,我发现似乎没有调用 boot .py我双击Finder中的文件。
任何意见都会受到赞赏。
提前多多感谢,
安德烈
答案 0 :(得分:1)
我刚刚了解到,Mac上的Tk可以处理一些AppleEvents,例如打开文件。
code.activestate.com/lists/pythonmac-sig/23079有一个很好的例子,Mac上特定的Tk功能列在tcl.tk/man/tcl/TkCmd/tk_mac.htm。 基本上你只需添加类似
的东西tk.createcommand("::tk::mac::OpenDocument", doOpenFile)
到你的Tk事件循环,其中doOpenFile
需要指向这样的函数:
def doOpenFile(*args):
for f in args:
do something
这在Python 2.7和Python 3.4.2中有效(未测试其他版本)。