如何在python中打开文件时接收文件

问题描述 投票:0回答:4

我正在尝试创建一个可以在 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 编译我的应用程序,但我对替代方案持开放态度)

python macos file text-editor finder
4个回答
3
投票

通过双击打开文件或将文件放在应用程序图标上时,MacOS 会向应用程序发送文件打开事件。

大多数 GUI 库都有一种方法来接收此类事件并将其转换为可以在 Python 中处理的内容。

您使用什么 GUI 库?您使用什么工具来创建应用程序包?


1
投票

对于 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()

0
投票

适用于 wxPython GUI 应用程序

wx.App继承自wx.PyApp;

覆盖 PyApp.MacOpenFile 方法签名是:

def MacOpenFile(self, fileName):

-1
投票
file = open("directory_to_file.txt", "r")
print(f.read())

f.read() 将是文件的内容

© www.soinside.com 2019 - 2024. All rights reserved.