Диалоговые окна открытия файла 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():

Пример использования функции 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()
Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *