Вибір файлу в Python за допомогою простого діалогового вікна


127

Я хотів би отримати шлях до файлу як вхід у мою програму консолі Python.

В даний час я можу лише просити повний шлях як вхід у консоль.

Чи є спосіб запустити простий інтерфейс користувача, де користувачі можуть вибрати файл, а не вводити повний шлях?

Відповіді:


212

Як щодо використання 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)

Готово!


У мене з'явився TypeError: об'єкт 'module' не можна викликати на Tk ().
користувач391339

1
Я повинен був зробити root = Tk.Tk (), а потім root.withdraw (). Тепер діалогове вікно відкритого файлу не закриється.
користувач391339

20
Використовуючи Python 3.x, і я вважаю, що "Tkinter" насправді повинен бути всіма малими літерами, "tkinter".
WestAce

1
@WestAce так, це було змінено з "Tkinter" на "tkinter" для Python3
Ben

1
Чи можна дозволити лише певні типи файлів? напр. Я хочу, щоб користувач
Shantanu

85

Python 3.x версія відповіді Etaoin для повноти:

from tkinter.filedialog import askopenfilename
filename = askopenfilename()

7
Для повного паралелізму, мабуть, також має бути import tkinter+ tkinter.Tk().withdraw().
imallett

4
це не працює для мене (на Mac, Python 3.6.6) Відкриється вікно графічного інтерфейсу, але ви не можете його закрити, і ви отримаєте пляжний кульок смерті
Бен Вінсент

1
те ж саме. діалогове вікно файлів не закриється
Cabara

1
цей код точно такий же, як прийнята відповідь, але неповний.
eric

На Mac 10.14.6 це відкрило Finder File, тоді він просто розбив всю систему :(
gaya

29

За допомогою EasyGui (документація, згенерована pydoc та epydoc для версії 0.96):

import easygui
print(easygui.fileopenbox())

Щоб встановити:

pip install easygui

Демонстрація:

import easygui
easygui.egdemo()

4
Це найкраще рішення поки що. Основна причина полягає в тому, що easygui - це пакетний пакет, який легко встановити
Yonatan Naor

2
На Mac OSX 10.14.5, python 3.6.7, easygui 0.98.1 Я отримую жахливий збій при спробі цього. Не рекомендовано.
Крістофер Барбер

Чому я отримую invalid syntaxпомилку print easygui.diropenbox()?
Bricktop


1
@ChristopherBarber те саме з 10.14.6. Python просто продовжує виходити.
gaya

11

У Python 2 використовуйте tkFileDialogмодуль.

import tkFileDialog

tkFileDialog.askopenfilename()

У Python 3 використовуйте tkinter.filedialogмодуль.

import tkinter.filedialog

tkinter.filedialog.askopenfilename()

Це не є частиною стандартної установки в Python 3.
miguelmorin

3

Ще один варіант, який слід врахувати, це Zenity: http://freecode.com/projects/zenity .

У мене виникла ситуація, коли я розробляв серверну програму Python (не компонент GUI), і, отже, не хотів вводити залежність від будь-яких інструментальних інструментів Python GUI, але я хотів, щоб деякі мої сценарії налагодження були параметризовані вхідними файлами і хотів візуально підкажете користувачеві файл, якщо він не вказав його в командному рядку. Зеніт був ідеальним пристосуванням. Щоб досягти цього, викликайте "zenity - file-selection" за допомогою модуля підпроцесу та фіксуйте stdout. Звичайно, це рішення не є специфічним для Python.

Zenity підтримує декілька платформ, і, можливо, він уже встановлений на наших серверах розробників, тому це полегшило нашу налагодження / розробку, не вводячи небажаної залежності.


0

Я отримав набагато кращі результати з wxPython, ніж tkinter, як це запропоновано у цій відповіді на пізніший дублікат питання:

https://stackoverflow.com/a/9319832

Версія wxPython створила діалог файлів, який виглядав так само, як діалог відкритого файлу майже з будь-якої іншої програми на моїй установці OpenSUSE Tumbleweed з робочим столом xfce, тоді як tkinter створив щось тісно і важко для читання з незнайомим інтерфейсом прокрутки сторони.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.