在带有python应用程序的文本文件上使用“打开方式”

时间:2014-11-17 20:03:23

标签: python tkinter

我一直在寻找一种方法,用我用python编写的文本编辑器打开一个文本文件,并假设它与系统参数有关,所以创建了一个简单的应用程序,它将编写由系统到文本窗口,并使用"打开"在文本文件和应用程序上,但唯一的参数是应用程序的路径。这里回答了许多与我类似的问题,但没有一个答案对我有用。我该怎么做?

感谢您的回复。 (我使用OS X 10.9.5,使用python 2.7)

尝试过的代码:

from Tkinter import *
import sys, time
root = Tk()
root.geometry('300x200')
text = Text(root)
text.pack(side=TOP, fill="both", expand=True)
text.insert(END, sys.argv)
for x in xrange(len(sys.argv)):
    text.insert(END,sys.argv[x])
root.mainloop()

显示的文字:

[' /Path/pyfe.app/Contents/Resources/file_opener.py'] /路径/ pyfe.app /内容/资源/ file_opener.py

2 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,那么您在谈论在单击文件时使用Finder的Open with上下文菜单打开文件。如果是这样,它可能与MacOSX - File extension associate with application - Programatically重复。标准方法是创建OS X应用程序包(对于Python程序,您可以使用py2app来执行此操作),然后在其Info.plist中设置正确的密钥类型。假设您的文本编辑器是一个真正的GUI应用程序(使用Tkinter或Cocoa或其他),而不仅仅是在shell终端窗口中运行的程序(例如,在Terminal.app中)。在这种情况下,您可以创建一个简单的包装器应用程序(甚至使用AppleScript或Automator并如上所述修改其Info.plist)以在终端窗口中启动Python程序并从open事件传递文件名。要正确处理在不同时间打开的多个文件,需要更多的工作。

更新:正如您已经澄清的那样,您正在使用Python Tkinter和一个真正的GUI应用程序。本机OS X Tk实现提供Apple事件处理程序,允许您处理像Open Document这样的Apple事件。支持是described in tcl terms in the Tcl/Tk documentation所以你需要将它翻译成Python,但它非常简单。 Python的IDLE应用程序有一个示例,例如,请参阅addOpenEventSupport in macosxSupport.py。对于使用py2app的简单应用程序,您可以改为使用py2app的argv仿真。

答案 1 :(得分:-1)

我在https://moosystems.com/articles/8-double-click-on-files-in-finder-to-open-them-in-your-python-and-tk-application.html发布了详细说明。

如上所述,您需要调整Info.plist文件,告诉OS X您的应用程序至少可以查看您要处理的文件类型。

然后,您可以使用py2app的argv模拟器访问应用中未运行的任何文件。

然后安装一个Tk事件处理程序,以便在应用程序运行时接受文件。

在链接文章中查找详细信息。