python - 当应用程序已经运行时,如何在基于 py2app 的 Python 应用程序中接受 "open document"事件?

标签 python macos py2app appleevents

我一直在 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/

相关文章:

python - 使用字符串作为变量名 Python

python - Mac 上 Python 的 Midi 库

python - Python 2.7 是否在 Mac OS X 上实现了 PEP 370?

sql - 将日期插入SQLite表

python - 相对导入和 py2app?

python - 使用 Py2exe 拒绝访问

java - 可靠/支持良好的库作为 GPS 单元的接口(interface)?

python - 将 py2app 与 Matplotlib 及其 Tex 格式一起使用?未找到 Dvipng

python - 使用 py2app 一旦 python 为 "compiled",open()/f.write() 就不起作用

python - 如何使用约束对 python 中的特定字符进行切片?