我正在尝试创建一个可以在 python 中打开文件的应用程序,例如文本编辑器。但我遇到了一个问题;我无法知道要打开哪个文件。前任。如果我在 Mac 的 Finder 上,并且想要打开一个文件,我的应用程序应该是一个可以用来打开该文件的应用程序。我的第一个假设是它在应用程序启动时作为参数传递。但是查看
sys.argv
的结果后,我没有看到该文件。我是否获取文件路径或文件内容并不重要。我不知道如何访问它。任何帮助将不胜感激!
这是我的代码的基本示例:
import sys
# This doesn't work!
args = sys.argv
if len(args) > 1:
file = args[1]
else:
file = "No file was provided"
# -------------------------------
# Display file
(我正在使用 py2app 和 tkinter 编译我的应用程序,但我对替代方案持开放态度)
通过双击打开文件或将文件放在应用程序图标上时,MacOS 会向应用程序发送文件打开事件。
大多数 GUI 库都有一种方法来接收此类事件并将其转换为可以在 Python 中处理的内容。
您使用什么 GUI 库?您使用什么工具来创建应用程序包?
对于 tkinter,
Tk()
根具有从操作系统捕获不同事件的功能。打开文档的事件是::tk::mac::OpenDocument
。要创建回调函数来处理事件,请使用 createcommand('::tk::mac::OpenDocument', callback)
。
这是一个基本示例:
import tkinter
root = tkinter.Tk('Open File')
file_text = tkinter.Text(root)
file_text.pack()
def callback(*files):
for f in files:
# Open File and write it to the screen
with open(f) as file:
text = file.read()
file_text.insert(tkinter.END , text)
root.createcommand('::tk::mac::OpenDocument', callback)
root.mainloop()
适用于 wxPython GUI 应用程序
wx.App继承自wx.PyApp;
覆盖 PyApp.MacOpenFile 方法签名是:
def MacOpenFile(self, fileName):
file = open("directory_to_file.txt", "r")
print(f.read())
f.read() 将是文件的内容