1

我一直在 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 应用程序。

我在boot .py 文件中添加了一些日志记录,发现当我的 py2app 捆绑的 Python 应用程序已经运行并且我在 Finder 中双击一个文件时,似乎没有调用boot .py。

任何输入将不胜感激。

非常感谢提前,

安德烈

4

1 回答 1

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 中运行良好(尚未测试其他版本)。

于 2014-12-18T07:56:01.267 回答