我一直在 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 应用程序已经运行时,boot.py 似乎没有被调用,并且我在 Finder 中双击一个文件。
如有任何意见,我们将不胜感激。
提前非常感谢,
安德烈
最佳答案
我刚刚了解到,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 中运行良好(尚未测试其他版本)。
关于python - 当应用程序已经运行时,如何在基于 py2app 的 Python 应用程序中接受 "open document"事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27326228/