Выбор файла в Python с простым диалогом - PullRequest
106 голосов
/ 27 августа 2010

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

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

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

Ответы [ 5 ]

176 голосов
/ 27 августа 2010

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

Готово!

75 голосов
/ 27 августа 2010

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

from tkinter.filedialog import askopenfilename
filename = askopenfilename()
22 голосов
/ 27 августа 2010

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

import easygui
print easygui.fileopenbox()

Для установки:

pip install easygui

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

import easygui
easygui.egdemo()
6 голосов
/ 27 августа 2010

Используйте модуль tkFileDialog , который является частью стандартной установки.

import tkFileDialog

print tkFileDialog.askopenfilename()
3 голосов
/ 22 мая 2013

Другой вариант для рассмотрения - Zenity: http://freecode.com/projects/zenity.

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

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

...