Диалоговые окна открытия файла Tkinter в Python
При разработке приложения 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()