首页 文章

当应用程序运行时,如何在基于py2app的Python应用程序中接受“打开文档”事件?

提问于
浏览
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事件,并将其发送到我的Python应用程序 .

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

任何输入将不胜感激 .

非常感谢提前,

安德烈

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(尚未测试其他版本) .

相关问题