【问题标题】:Lightweight cross-platform way to prompt for a file提示文件的轻量级跨平台方式
【发布时间】:2018-06-04 20:31:17
【问题描述】:

我发现了一种非常内置且简单的方法来提示系统特定的漂亮打开文件对话框:

import Tkinter
from tkFileDialog import askopenfilename
tk_root = Tkinter.Tk()
tk_root.withdraw()

result = askopenfilename(
    filetypes=[("Foos", "*.png")],
)

但是,就大小而言,这种依赖性太重了。我正在使用 py2exe 打包我的应用程序,并且由于必须包含 Tkinter,该应用程序要大 7 兆字节。肯定有更简单的方法来提示适用于 Windows、Mac 和 Linux 的本机文件对话框?

【问题讨论】:

  • 您的应用程序是否使用任何其他图形工具包?它是命令行应用还是窗口应用?
  • @jozzas:它使用 pygame,所以它是一个窗口应用程序。它只有一个 pygame 窗口。

标签: python dependencies cross-platform py2exe


【解决方案1】:

有一个 C 库旨在执行此功能,可以用 python 包装。

https://github.com/mlabbe/nativefiledialog

不确定 py2exe 格式有什么限制,但我认为这可以打包到一个点子轮中。

【讨论】:

    【解决方案2】:

    如果您正在开发一个 pygame 应用程序,有一个名为 Pygame Utilities 的项目,它对文件对话框等提供跨平台支持。它似乎相当轻巧。

    不过,看起来并没有很好的文档记录。如果你下载了包,运行docs目录下的setup.py文件生成文档。

    【讨论】:

    • 嗯,这看起来像是有人在 Pygame 中实现了一个文件选择器......我真正在寻找的是一个“本机”文件浏览器。就像在 Windows 中它会使用资源管理器一样,在 Mac 上它会使用 Finder 等。这就是 tkintre 似乎在做的事情,除非我弄错了,他们只是付出了很多努力来模仿每个平台上的每一个?
    • 这就是 TKinter 正在做的事情。它的一些替代品是 wxPython (wxWidgets) 和 Qt,它们都可以完全满足您的需求,但其中更轻量级的 - 我认为 Tkinter 将是这三个中最小的。
    • 嗯...Windows 上没有标准的“打开文件对话框”?例如,这个GetOpenFileName 函数。然后我只需要以某种方式连接到 DLL……太好了,我可以为此使用pywin32,但是我必须为 Mac 等以不同的方式实现它。我希望其他人已经完成了这项工作。但如果不是,也许我可以做到并发布模块。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    相关资源
    最近更新 更多