При разработке приложения Tkinter, работающего с файловой системой в Python, необходимо предоставить диалоговое окно, позволяющее выбирать файлы.
Для этого можно использовать модуль tkinter.filedialog.
Функции диалогового окна открытия файла в Tkinter
Следующие шаги показывают, как отобразить диалог открытия файла:
- Сначала импортируйте модуль tkinter.filedialog:
from tkinter import filedialog as fd
- Во-вторых, вызовите функцию fd.askopenfilename(), чтобы отобразить диалоговое окно, позволяющее выбрать один файл:
filename = fd.askopenfilename()
Функция askopenfilename() возвращает выбранное вами имя файла.
Функция askopenfilename() также поддерживает другие полезные параметры, включая начальный каталог, отображаемый в диалоговом окне, или фильтрацию файлов по их расширениям.
Следующая программа отображает кнопку:

Если нажать кнопку, откроется диалоговое окно файла:

После выбора файла программа покажет полный путь к выбранному файлу:

Программа:
import tkinter as tk
from tkinter import ttk
from tkinter import filedialog as fd
from tkinter.messagebox import showinfo
# create the root window
root = tk.Tk()
root.title('Tkinter Open File Dialog')
root.resizable(False, False)
root.geometry('300x150')
def select_file():
filetypes =(
('text files', '*.txt'),
('All files', '*.*')
)
filename = fd.askopenfilename(
title="Open a file",
initialdir="/",
filetypes=filetypes)
showinfo(
title="Selected File",
message=filename
)
# open button
open_button = ttk.Button(
root,
text="Open a File",
command=select_file
)
open_button.pack(expand=True)
# run the application
root.mainloop()
Выбор нескольких файлов
Функция askopenfilenames() отображает диалоговое окно для выбора нескольких файлов. Она возвращает выбранные имена файлов в виде кортежа. Например:
import tkinter as tk
from tkinter import ttk
from tkinter import filedialog as fd
from tkinter.messagebox import showinfo
# create the root window
root = tk.Tk()
root.title('Tkinter File Dialog')
root.resizable(False, False)
root.geometry('300x150')
def select_files():
filetypes =(
('text files', '*.txt'),
('All files', '*.*')
)
filenames = fd.askopenfilenames(
title="Open files",
initialdir="/",
filetypes=filetypes)
showinfo(
title="Selected Files",
message=filenames
)
# open button
open_button = ttk.Button(
root,
text="Open Files",
command=select_files
)
open_button.pack(expand=True)
root.mainloop()
Открытие файлов напрямую
Получив выбранные имена файлов, вы можете открыть их с помощью метода open().
Для большего удобства модуль tkinter.filedialog также предоставляет некоторые функции, которые позволяют выбрать один или несколько файлов и напрямую вернуть объекты файлов.
Функция askopenfile() отображает диалоговое окно файла и возвращает файловый объект выбранного файла:
f = fd.askopenfile()
А функция askopenfiles() отображает диалоговое окно и возвращает объекты выбранных файлов:
f = fd.askopenfiles()
Следующая программа иллюстрирует, как использовать функцию askopenfile():

Это позволит вам открыть текстовый файл и отобразить его содержимое в виджете Text:
import tkinter as tk
from tkinter import ttk
from tkinter import filedialog as fd
# Root window
root = tk.Tk()
root.title('Display a Text File')
root.resizable(False, False)
root.geometry('550x250')
# Text editor
text = tk.Text(root, height=12)
text.grid(column=0, row=0, sticky='nsew')
def open_text_file():
# file type
filetypes =(
('text files', '*.txt'),
('All files', '*.*')
)
# show the open file dialog
f = fd.askopenfile(filetypes=filetypes)
# read the text file and show its content on the Text
text.insert('1.0', f.readlines())
# open file button
open_button = ttk.Button(
root,
text="Open a File",
command=open_text_file
)
open_button.grid(column=0, row=1, sticky='w', padx=10, pady=10)
root.mainloop() 