Choisir un fichier en Python avec une simple boîte de dialogue

128

Je voudrais obtenir le chemin du fichier en entrée dans mon application console Python.

Actuellement, je ne peux demander le chemin complet que comme entrée dans la console.

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

Mustafa Zengin
la source

Réponses:

212

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é!

Etaoin
la source
J'ai TypeError: l'objet 'module' n'est pas appelable sur Tk (). Remove () - des idées?
user391339
1
J'ai dû faire root = Tk.Tk () puis root.withdraw (). Cependant, la fenêtre de dialogue d'ouverture de fichier ne se ferme pas.
user391339
20
En utilisant Python 3.x et je crois que "Tkinter" est en fait censé être tout en minuscules, "tkinter".
WestAce
1
@WestAce oui, il est passé de "Tkinter" à "tkinter" pour Python3
Ben
1
Existe-t-il un moyen d'autoriser uniquement certains types de fichiers? par exemple. Je veux que l'utilisateur sélectionne uniquement les fichiers image
Shantanu Shinde
85

Version Python 3.x de la réponse d'Etaoin pour l'exhaustivité:

from tkinter.filedialog import askopenfilename
filename = askopenfilename()
Stefano Palazzo
la source
7
Pour un parallélisme total, devrait probablement aussi avoir import tkinter+ tkinter.Tk().withdraw().
imallett
4
cela ne fonctionne pas pour moi (sur Mac, Python 3.6.6) La fenêtre de l'interface graphique s'ouvre mais vous ne pouvez pas la fermer et vous obtenez le beachball of death
Ben Vincent
2
pareil ici. la boîte de dialogue du fichier ne se ferme pas
Cabara
1
ce code est exactement le même que la réponse acceptée mais incomplet.
eric
Sur Mac 10.14.6, cela a ouvert la recherche de fichiers, puis il a juste planté tout le système :(
gaya
30

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()
jfs
la source
4
C'est la meilleure solution à ce jour. La raison principale est qu'easygui est un package pip et facile à installer
Yonatan Naor
2
Sur Mac OSX 10.14.5, python 3.6.7, easygui 0.98.1, j'obtiens un terrible crash quand j'essaye ceci. Non recommandé.
Christopher Barber
Pourquoi ai-je une invalid syntaxerreur print easygui.diropenbox()?
Bricktop le
1
@ChristopherBarber idem avec 10.14.6. Python n'arrête pas de s'arrêter.
gaya le
11

Dans Python 2, utilisez le tkFileDialogmodule.

import tkFileDialog

tkFileDialog.askopenfilename()

Dans Python 3, utilisez le tkinter.filedialogmodule.

import tkinter.filedialog

tkinter.filedialog.askopenfilename()
Gary Kerr
la source
Il ne fait pas partie de l'installation standard en Python 3.
miguelmorin
3

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

J'avais une situation où je développais une application serveur Python (pas de composant GUI) et je ne voulais donc pas introduire de dépendance sur les toolkits d'interface graphique python, mais je voulais que certains de mes scripts de débogage soient paramétrés par des fichiers d'entrée et je voulais demander visuellement à l'utilisateur un fichier s'il n'en a pas spécifié un sur la ligne de commande. Zenity était un ajustement parfait. Pour ce faire, appelez "zenity --file-selection" en utilisant le module de sous-processus et capturez la sortie stdout. Bien sûr, cette solution n'est pas spécifique à Python.

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

kylejmcintyre
la source
0

J'ai obtenu de bien meilleurs résultats avec wxPython qu'avec tkinter, comme suggéré dans cette réponse à une question en double ultérieure:

https://stackoverflow.com/a/9319832

La version wxPython a produit la boîte de dialogue de fichier qui ressemblait à la boîte de dialogue de fichier ouvert à partir de n'importe quelle autre application sur mon installation OpenSUSE Tumbleweed avec le bureau xfce, tandis que tkinter produisait quelque chose d'étroit et de difficile à lire avec une interface de défilement latéral inconnue.

Glen Whitney
la source