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?

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!


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()

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()

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()

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.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.