web-dev-qa-db-fra.com

Choisir un fichier dans Python avec un simple dialogue

Je souhaite obtenir le chemin d'accès au fichier en tant qu'entrée dans mon application de console Python.

Actuellement, je ne peux demander qu'un chemin complet en tant qu'entrée dans la console.

Existe-t-il un moyen de déclencher une interface utilisateur simple dans laquelle les utilisateurs peuvent sélectionner un fichier au lieu de saisir le chemin complet?

109
Mustafa Zengin

Que diriez-vous d'utiliser 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)

Terminé!

181
Etaoin

La version Python 3.x de la réponse d'Etaoin pour être complet:

from tkinter.filedialog import askopenfilename
filename = askopenfilename()
78
Stefano Palazzo

Avec EasyGui (documentation générée par pydoc et epydoc pour la version 0.96):

import easygui
print easygui.fileopenbox()

À installer:

pip install easygui

Démo:

import easygui
easygui.egdemo()
23
jfs

Utilisez le module tkFileDialog qui fait partie de l’installation standard.

import tkFileDialog

print tkFileDialog.askopenfilename()
6
Gary Kerr

Zenity est une autre option à considérer: http://freecode.com/projects/zenity .

Dans une situation où je développais une application serveur Python (aucun composant d'interface graphique), je ne voulais donc pas introduire de dépendance sur les kits d'outils d'interface graphique python, mais je voulais mes scripts de débogage doivent être paramétrés par les fichiers d'entrée et voulus visuellement Demander à l'utilisateur un fichier s'il ne le spécifie pas sur la ligne de commande. Zenity était un ajustement parfait. Pour ce faire, appelez "zenity --file-selection" à l'aide du module de sous-processus et capturez la sortie standard. Bien sûr, cette solution n'est pas spécifique à Python.

Zenity prend en charge plusieurs plates-formes et a déjà été installé sur nos serveurs de développement. Il a donc facilité notre débogage/développement sans introduire de dépendance indésirable.

3
kylejmcintyre