Elegir un archivo en Python con un cuadro de diálogo simple

127

Me gustaría obtener la ruta del archivo como entrada en mi aplicación de consola Python.

Actualmente solo puedo pedir la ruta completa como entrada en la consola.

¿Hay alguna manera de activar una interfaz de usuario simple donde los usuarios puedan seleccionar el archivo en lugar de escribir la ruta completa?

Mustafa Zengin
fuente

Respuestas:

212

¿Qué hay de usar 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)

¡Hecho!

Etaoin
fuente
Obtuve TypeError: el objeto 'módulo' no es invocable en Tk (). Retirada () - ¿alguna idea?
user391339
1
Tuve que hacer root = Tk.Tk () luego root.withdraw (). Ahora, sin embargo, la ventana de diálogo de abrir archivo no se cierra.
user391339
20
Usando Python 3.xy creo que "Tkinter" en realidad se supone que es todo en minúsculas, "tkinter".
WestAce
1
@WestAce sí, se cambió de "Tkinter" a "tkinter" para Python3
Ben
1
¿Hay alguna forma de permitir solo ciertos tipos de archivos? por ej. Quiero que el usuario seleccione solo archivos de imagen
Shantanu Shinde
85

Versión de Python 3.x de la respuesta de Etaoin para completar:

from tkinter.filedialog import askopenfilename
filename = askopenfilename()
Stefano Palazzo
fuente
77
Para un paralelismo total, probablemente también debería tener import tkinter+ tkinter.Tk().withdraw().
imallett
44
esto no funciona para mí (en Mac, Python 3.6.6) La ventana de la GUI se abre pero no puedes cerrarla y obtienes beachball de la muerte
Ben Vincent
1
igual que aquí. el diálogo de archivo no se cerrará
Cabara
1
Este código es exactamente igual a la respuesta aceptada pero incompleto.
Eric
En Mac 10.14.6, esto abrió el buscador de archivos y luego bloqueó todo el sistema :(
gaya
29

Con EasyGui (documentación generada por pydoc y epydoc para la versión 0.96):

import easygui
print(easygui.fileopenbox())

Instalar:

pip install easygui

Manifestación:

import easygui
easygui.egdemo()
jfs
fuente
44
Esta es la mejor solución hasta ahora. La razón principal es que easygui es un paquete pip y fácil de instalar
Yonatan Naor
2
En Mac OSX 10.14.5, python 3.6.7, easygui 0.98.1 Me da un horrible bloqueo cuando intento esto. No recomendado.
Christopher Barber
¿Por qué recibo un invalid syntaxerror paraprint easygui.diropenbox() ?
Bricktop
1
@ChristopherBarber igual con 10.14.6. Python sigue renunciando.
gaya
11

En Python 2 usa el tkFileDialogmódulo.

import tkFileDialog

tkFileDialog.askopenfilename()

En Python 3 usa el tkinter.filedialogmódulo.

import tkinter.filedialog

tkinter.filedialog.askopenfilename()
Gary Kerr
fuente
No es parte de la instalación estándar en Python 3.
miguelmorin
3

Otra opción a considerar es Zenity: http://freecode.com/projects/zenity .

Tuve una situación en la que estaba desarrollando una aplicación de servidor Python (sin componente de GUI) y, por lo tanto, no quería introducir una dependencia en ningún kit de herramientas de GUI de Python, pero quería que algunos de mis scripts de depuración fueran parametrizados por archivos de entrada y quería solicite visualmente al usuario un archivo si no especificó uno en la línea de comando. Zenity fue un ajuste perfecto. Para lograr esto, invoque "zenity --file-selection" usando el módulo de subproceso y capture el stdout. Por supuesto, esta solución no es específica de Python.

Zenity admite múltiples plataformas y ya estaba instalado en nuestros servidores de desarrollo, por lo que facilitó nuestra depuración / desarrollo sin introducir una dependencia no deseada.

kylejmcintyre
fuente
0

Obtuve resultados mucho mejores con wxPython que con tkinter, como se sugiere en esta respuesta a una pregunta duplicada posterior:

https://stackoverflow.com/a/9319832

La versión de wxPython produjo el diálogo de archivo que se veía igual que el diálogo de archivo abierto de casi cualquier otra aplicación en mi instalación de OpenSUSE Tumbleweed con el escritorio xfce, mientras que tkinter produjo algo estrecho y difícil de leer con una interfaz de desplazamiento lateral desconocida.

Glen Whitney
fuente