156 votes

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

J'aimerais obtenir le chemin d'un fichier comme entrée dans mon application console Python.

Actuellement, je ne peux que demander le chemin complet 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 d'accès complet ?

3 votes

Bonne question. C'est ce que je cherchais justement. Je l'ai mise en ligne. Je vous remercie !

249voto

Etaoin Points 4083

Pourquoi ne pas utiliser tkinter ?

from Tkinter import Tk     # from tkinter import Tk for Python 3.x
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)

C'est fait !

0 votes

J'ai obtenu TypeError : 'module' object is not callable on Tk().withdraw() - des idées ?

2 votes

J'ai dû faire Root = Tk.Tk() then Root.withdraw(). Maintenant, la fenêtre de dialogue d'ouverture de fichier ne se ferme pas pour autant.

31 votes

J'utilise Python 3.x et je crois que "Tkinter" est censé être en minuscules, "tkinter".

101voto

Stefano Palazzo Points 1415

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

from tkinter.filedialog import askopenfilename
filename = askopenfilename()

8 votes

Pour un parallélisme total, il faudrait probablement aussi avoir import tkinter + tkinter.Tk().withdraw() .

5 votes

Cela ne fonctionne pas pour moi (sur Mac, Python 3.6.6) La fenêtre GUI s'ouvre mais vous ne pouvez pas la fermer et vous obtenez un beachball de la mort

4 votes

Idem, la boîte de dialogue du fichier ne se ferme pas.

38voto

J.F. Sebastian Points 102961

Avec EasyGui :

import easygui
print(easygui.fileopenbox())

Pour l'installation :

pip install easygui

Démonstration :

import easygui
easygui.egdemo()

4 votes

C'est la meilleure solution à ce jour. La raison principale est que easygui est un paquetage pip et qu'il est facile à installer.

4 votes

Sur Mac OSX 10.14.5, python 3.6.7, easygui 0.98.1, j'obtiens un crash horrible lorsque j'essaie ceci. Ce n'est pas recommandé.

0 votes

Pourquoi est-ce que je reçois invalid syntax erreur pour print easygui.diropenbox() ?

14voto

PreludeAndFugue Points 3504

En Python 2, utilisez l'option tkFileDialog module.

import tkFileDialog

tkFileDialog.askopenfilename()

Dans Python 3, utilisez la fonction tkinter.filedialog module.

import tkinter.filedialog

tkinter.filedialog.askopenfilename()

1 votes

Il ne fait pas partie de l'installation standard de Python 3.

4voto

kylejmcintyre Points 359

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

J'étais dans une situation où je développais une application serveur Python (pas de composant GUI) et je ne voulais donc pas introduire de dépendance à l'égard d'un quelconque kit d'outils GUI 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 spécifiait pas un sur la ligne de commande. Zenity était la solution idéale. Pour ce faire, invoquez "zenity --file-selection" en utilisant le module subprocess et capturez la sortie stdout. Bien sûr, cette solution n'est pas spécifique à Python.

Zenity supporte plusieurs plateformes et était déjà installé sur nos serveurs de développement, ce qui a facilité notre débogage et notre développement sans introduire de dépendance indésirable.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X