使用简单的Dialog在Python中选择文件

Mus*_*gin 115 python user-interface dialog filechooser

我想在我的Python控制台应用程序中获取文件路径作为输入.

目前我只能在控制台中询问完整路径作为输入.

有没有办法触发一个简单的用户界面,用户可以选择文件而不是输入完整路径?

Eta*_*oin 189

使用tkinter怎么样?

from Tkinter import Tk
from tkinter.filedialog import askopenfilename

Tk().withdraw() # we don't want a full GUI, so keep the root window from appearing
filename = askopenfilename() # show an "Open" dialog box and return the path to the selected file
print(filename)
Run Code Online (Sandbox Code Playgroud)

完成!

  • 使用Python 3.x,我相信"Tkinter"实际上应该全部是小写的,"tkinter". (10认同)
  • 有没有办法只允许某些类型的文件?例如。我希望用户仅选择图像文件 (4认同)
  • 我必须执行 root = Tk.Tk() 然后 root.withdraw()。但现在打开文件对话框窗口不会关闭。 (2认同)
  • @WestAce是的,对于Python3,它从“Tkinter”更改为“tkinter” (2认同)

Ste*_*zzo 83

Python 3.x版本的Etaoin完整性答案:

from tkinter.filedialog import askopenfilename
filename = askopenfilename()
Run Code Online (Sandbox Code Playgroud)

  • 对于总并行性,应该也可以使用`import tkinter` +`tkinter.Tk().withdraw()`. (7认同)
  • 同样在这里。文件对话框不会关闭 (4认同)
  • 这对我不起作用(在Mac,Python 3.6.6上)GUI窗口打开,但是您无法将其关闭,并且会死机。 (2认同)
  • 该代码与接受的答案完全相同,但不完整。 (2认同)

jfs*_*jfs 26

使用EasyGui(由pydoc生成的文档和用于版本0.96的epydoc):

import easygui
print(easygui.fileopenbox())
Run Code Online (Sandbox Code Playgroud)

安装:

pip install easygui
Run Code Online (Sandbox Code Playgroud)

演示:

import easygui
easygui.egdemo()
Run Code Online (Sandbox Code Playgroud)

  • 这是迄今为止最好的解决方案。主要原因是easygui是pip软件包,易于安装 (4认同)
  • 在 Mac OSX 10.14.5、python 3.6.7、easygui 0.98.1 上,当我尝试这个时,我遇到了可怕的崩溃。不建议。 (4认同)
  • 这是如此简单,并且在第一次尝试时就起作用了。在代码可读性方面,感觉就像是python的处理方式。 (2认同)
  • @Bricktop /sf/ask/57886391/吗? (2认同)

Gar*_*err 8

使用tkFileDialog模块,它是标准安装的一部分.

import tkFileDialog

tkFileDialog.askopenfilename()
Run Code Online (Sandbox Code Playgroud)


小智 8

这对我有用

参考: https://www.youtube.com/watch?v =H71ts4XxWYU

import  tkinter as tk
from tkinter import filedialog
root = tk.Tk()
root.withdraw()
file_path = filedialog.askopenfilename()
print(file_path)
Run Code Online (Sandbox Code Playgroud)


小智 7

建议的root.withdraw()(也在此处)隐藏窗口而不是删除它,并且在 VS Code 中使用交互式控制台时会导致问题(“重复执行”错误)。

下面的两个片段返回“打开”或“另存为”中的文件路径(Windows 上的 python 3):

import tkinter as tk
from tkinter import filedialog

filetypes = (
    ('Text files', '*.TXT'),
    ('All files', '*.*'),
)

# open-file dialog
root = tk.Tk()
filename = tk.filedialog.askopenfilename(
    title='Select a file...',
    filetypes=filetypes,
)
root.destroy()
print(filename)

# save-as dialog
root = tk.Tk()
filename = tk.filedialog.asksaveasfilename(
    title='Save as...',
    filetypes=filetypes,
    defaultextension='.txt'
)
root.destroy()
print(filename)
# filename == 'path/to/myfilename.txt' if you type 'myfilename'
# filename == 'path/to/myfilename.abc' if you type 'myfilename.abc'
Run Code Online (Sandbox Code Playgroud)


kyl*_*yre 5

另一个需要考虑的选择是 Zenity: http: //freecode.com/projects/zenity

我遇到过这样的情况:我正在开发一个 Python 服务器应用程序(没有 GUI 组件),因此不想引入对任何 python GUI 工具包的依赖,但我希望我的一些调试脚本由输入文件参数化,并且想要如果用户未在命令行上指定文件,则以可视方式提示用户输入文件。Zenity 是一个完美的选择。为此,请使用子进程模块调用“zenity --file-selection”并捕获标准输出。当然,这个解决方案不是特定于 Python 的。

Zenity 支持多个平台,并且恰好已经安装在我们的开发服务器上,因此它方便了我们的调试/开发,而不会引入不需要的依赖项。


Gle*_*ney 5

我使用 wxPython 获得了比 tkinter 更好的结果,正如稍后重复问题的答案中所建议的:

/sf/answers/652388271/

wxPython 版本生成的文件对话框与我在 xfce 桌面上安装的 OpenSUSE Tumbleweed 上的几乎任何其他应用程序中打开的文件对话框看起来相同,而 tkinter 则使用不熟悉的横向滚动界面生成了狭窄且难以阅读的内容。