Escolhendo um arquivo em Python com caixa de diálogo simples


127

Gostaria de obter o caminho do arquivo como entrada no meu aplicativo de console Python.

Atualmente, só posso solicitar o caminho completo como uma entrada no console.

Existe uma maneira de acionar uma interface de usuário simples em que os usuários possam selecionar o arquivo em vez de digitar o caminho completo?

Respostas:


212

Que tal usar o 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)

Feito!


Eu recebi TypeError: o objeto 'module' não pode ser chamado em Tk (). Retirada () - alguma idéia?
user391339

1
Eu tive que fazer root = Tk.Tk () e depois root.withdraw (). Agora, a janela de diálogo de arquivo aberto não fecha.
user391339

20
Usando o Python 3.xe acredito que "Tkinter" deve ser todo em minúsculas, "tkinter".
WestAce 29/06

1
@WestAce sim, foi alterado de "Tkinter" para "tkinter" para Python3
Ben

1
Existe alguma maneira de permitir apenas certos tipos de arquivos? por exemplo. Quero que o usuário selecione apenas arquivos de imagem
Shantanu Shinde

85

Versão do Python 3.x da resposta da Etaoin quanto à integridade:

from tkinter.filedialog import askopenfilename
filename = askopenfilename()

7
Para paralelismo total, provavelmente também deve ter import tkinter+ tkinter.Tk().withdraw().
precisa saber é o seguinte

4
isso não funciona para mim (no Mac, Python 3.6.6) A janela GUI é aberto, mas você não pode fechá-lo e você começa beachball da morte
Ben Vincent

1
o mesmo aqui. o diálogo de arquivo não vai fechar
Cabara

1
esse código é exatamente o mesmo que a resposta aceita, mas incompleto.
eric

No Mac 10.14.6, isso abriu o Localizador de arquivos e depois travou todo o sistema :(
gaya

29

Com o EasyGui (documentação gerada pelo pydoc e epydoc para a versão 0.96):

import easygui
print(easygui.fileopenbox())

Para instalar:

pip install easygui

Demo:

import easygui
easygui.egdemo()

4
Esta é a melhor solução até agora. A principal razão é que EasyGUI é um pacote de pip e fácil de instalar
Yonatan Naor

2
No Mac OSX 10.14.5, python 3.6.7, easygui 0.98.1, recebo uma falha horrível ao tentar isso. Não recomendado.
Christopher Barber

Por que estou recebendo invalid syntaxerro print easygui.diropenbox()?
Bricktop


1
@ChristopherBarber mesmo com 10.14.6. Python continua saindo.
gaya

11

No Python 2, use o tkFileDialogmódulo

import tkFileDialog

tkFileDialog.askopenfilename()

No Python 3, use o tkinter.filedialogmódulo

import tkinter.filedialog

tkinter.filedialog.askopenfilename()

Não faz parte da instalação padrão no Python 3.
miguelmorin 25/09/19

3

Outra opção a considerar é o Zenity: http://freecode.com/projects/zenity .

Eu tive uma situação em que estava desenvolvendo um aplicativo de servidor Python (nenhum componente da GUI) e, portanto, não queria introduzir uma dependência em nenhum kit de ferramentas da GUI do python, mas queria que alguns dos meus scripts de depuração fossem parametrizados pelos arquivos de entrada e quisesse solicitar visualmente ao usuário um arquivo se ele não especificou um na linha de comando. Zenity foi um ajuste perfeito. Para conseguir isso, chame "zenity --file-selection" usando o módulo de subprocesso e capture o stdout. Obviamente, esta solução não é específica para Python.

O Zenity suporta várias plataformas e já estava instalado em nossos servidores de desenvolvimento, facilitando nossa depuração / desenvolvimento sem introduzir uma dependência indesejada.


0

Obtive resultados muito melhores com o wxPython do que com o tkinter, conforme sugerido nesta resposta a uma pergunta duplicada posterior:

https://stackoverflow.com/a/9319832

A versão wxPython produziu o diálogo de arquivo que parecia o mesmo do arquivo aberto de praticamente qualquer outro aplicativo na minha instalação do OpenSUSE Tumbleweed com a área de trabalho do xfce, enquanto o tkinter produziu algo apertado e difícil de ler com uma interface de rolagem lateral desconhecida.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.