Выбор файла в Python с помощью простого диалога


128

Я хотел бы получить путь к файлу в качестве входных данных в моем консольном приложении Python.

В настоящее время я могу запрашивать только полный путь в качестве ввода в консоли.

Есть ли способ запустить простой пользовательский интерфейс, в котором пользователи могут выбирать файл вместо того, чтобы вводить полный путь?

Ответы:


212

Как насчет использования 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)

Готово!


Я получил TypeError: объект 'module' не может быть вызван в Tk (). Remove () - есть идеи?
user391339

1
Мне пришлось сделать root = Tk.Tk (), затем root.withdraw (). Однако теперь диалоговое окно открытия файла не закрывается.
user391339

20
Используя Python 3.x, и я считаю, что «Tkinter» на самом деле должен быть полностью в нижнем регистре, «tkinter».
WestAce

1
@WestAce: да, он был изменен с "Tkinter" на "tkinter" для Python3
Бен

1
Есть ли способ разрешить только определенные типы файлов? например, для Я хочу, чтобы пользователь
Шантану Шинде

85

Версия Python 3.x ответа Etaoin для полноты:

from tkinter.filedialog import askopenfilename
filename = askopenfilename()

7
Для полного параллелизма, вероятно, также должен быть import tkinter+ tkinter.Tk().withdraw().
imallett

4
у меня это не работает (на Mac, Python 3.6.6) Окно графического интерфейса открывается, но вы не можете его закрыть, и вы получаете мяч смерти
Бен Винсент,

2
тоже самое. диалоговое окно с файлом не закрывается
Cabara

1
этот код полностью совпадает с принятым ответом, но является неполным.
Эрик

На Mac 10.14.6 это открыло средство поиска файлов, а затем просто
gaya

30

С EasyGui (документация, созданная pydoc и epydoc для версии 0.96):

import easygui
print(easygui.fileopenbox())

Установить:

pip install easygui

Демо-версия:

import easygui
easygui.egdemo()

4
На данный момент это лучшее решение. Основная причина в том, что easygui представляет собой пакетный пакет и его легко установить
Йонатан Наор,

2
В Mac OSX 10.14.5, python 3.6.7, easygui 0.98.1 я получаю ужасный сбой, когда пытаюсь это сделать. Не рекомендуется.
Кристофер Барбер,

Почему я получаю сообщение invalid syntaxоб ошибке print easygui.diropenbox()?
Bricktop


1
@ChristopherBarber то же самое с 10.14.6. Python просто продолжает уходить.
gaya

11

В Python 2 используйте tkFileDialogмодуль.

import tkFileDialog

tkFileDialog.askopenfilename()

В Python 3 используйте tkinter.filedialogмодуль.

import tkinter.filedialog

tkinter.filedialog.askopenfilename()

Это не является частью стандартной установки в Python 3.
miguelmorin

3

Еще один вариант - Zenity: http://freecode.com/projects/zenity .

У меня была ситуация, когда я разрабатывал серверное приложение Python (без компонента GUI) и, следовательно, не хотел вводить зависимость от каких-либо инструментов графического интерфейса Python, но я хотел, чтобы некоторые из моих сценариев отладки параметризовались входными файлами, и я хотел визуально запрашивать у пользователя файл, если он не указал его в командной строке. Зенити идеально подошел. Для этого вызовите zenity --file-selection с помощью модуля subprocess и запишите stdout. Конечно, это решение не зависит от Python.

Zenity поддерживает несколько платформ и уже был установлен на наших серверах разработчиков, поэтому он упростил нашу отладку / разработку, не создавая нежелательных зависимостей.


0

Я получил гораздо лучшие результаты с wxPython, чем с tkinter, как это предлагается в этом ответе на более поздний повторяющийся вопрос:

https://stackoverflow.com/a/9319832

Версия wxPython создавала диалоговое окно файла, которое выглядело так же, как диалоговое окно открытия файла практически из любого другого приложения в моей установке OpenSUSE Tumbleweed с рабочим столом xfce, тогда как tkinter создавал что-то тесное и трудное для чтения с незнакомым интерфейсом с боковой прокруткой.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.