Библиотека Tkinter содержит несколько модулей, предоставляющих доступ к уже готовым диалоговым окнам. Это окна различных сообщений, выбора по принципу «да-нет», открытия и сохранения файлов.
В этой статье мы рассмотрим примеры окон из модулей messagebox и filedialog пакета tkinter.
Для вызова диалоговых окон открытия и сохранения файлов и работу с ними необходимо импортировать «подмодуль» Tkinter — tkinter.filedialog, в котором описаны классы для окон данного типа. Рассмотрим пример:
В этой статье мы рассмотрим примеры окон из модулей messagebox и filedialog пакета tkinter.
Для вызова диалоговых окон открытия и сохранения файлов и работу с ними необходимо импортировать «подмодуль» Tkinter — tkinter.filedialog, в котором описаны классы для окон данного типа. Рассмотрим пример:
from tkinter import *
from tkinter.filedialog import *
root = Tk()
root.title("Пример работы диалоговых окон")
root.minsize(width=500, height=400)
op = askopenfilename()
sa = asksaveasfilename()
root.mainloop()
Здесь создаются два объекта (op и sa): один вызывает диалоговое окно «Открыть», а другой «Сохранить как…». При выполнении программы, они друг за другом выводятся на экран после появления главного окна.
Диалоговые окна мы научились создавать, однако если мы попытаемся открыть какой-нибудь текстовый файл, то в лучшем случае ничего не произойдет. Поэтому нужен модуль, который может нам помочь.
Метод input модуля fileinput может принимать в качестве аргумента адрес файла, читать его содержимое, формируя список строк.
Далее с помощью цикла for можно извлекать строки последовательно и помещать их, например, в текстовое поле. Пример:
Диалоговые окна мы научились создавать, однако если мы попытаемся открыть какой-нибудь текстовый файл, то в лучшем случае ничего не произойдет. Поэтому нужен модуль, который может нам помочь.
Метод input модуля fileinput может принимать в качестве аргумента адрес файла, читать его содержимое, формируя список строк.
Далее с помощью цикла for можно извлекать строки последовательно и помещать их, например, в текстовое поле. Пример:
from tkinter import *
from tkinter.filedialog import *
import fileinput
root = Tk()
root.title("Пример работы диалоговых окон")
root.minsize(width=500, height=400)
txt = Text(root, width=40, height=15, font="14")
txt.pack()
op = askopenfilename()
for i in fileinput.input(op):
txt.insert(END, i)
root.mainloop()
Видео по уроку:
Программа «Редактор файлов»
Для закрепления теории создадим небольшую программу. Полный листинг:
from tkinter import *
from tkinter.filedialog import *
import fileinput
# открытие файла
def _open():
op = askopenfilename()
print(op)
f = open(op, "r", encoding='utf-8')
content = f.read()
txt.delete(1.0,END)
txt.insert(END, content)
# сохранение файла
def _save():
sa = asksaveasfilename()
content = txt.get(1.0,END)
f = open(sa, "w", encoding='utf-8')
f.write(content)
f.close()
root = Tk()
root.title("Текстовый редактор")
root.minsize(width=500, height=400)
m = Menu(root)
root.config(menu=m)
fm = Menu(m)
m.add_cascade(label="Файл", menu=fm)
fm.add_command(label="Открыть...", command=_open)
fm.add_command(label="Сохранить как...", command=_save)
txt = Text(root, width=40, height=15, font=" Courier 14")
txt.pack()
root.mainloop()
Программа напоминает простейший редактор файлов. В программе есть небольшое меню. Загрузка и сохранение файла осуществляется с вызовом диалога открытия файла. Для открытия и сохранения мы создали две функции.
Вывод программы:
Вывод программы:
Видео по созданию программы:
MessageBox — вывод различных сообщений
Еще одна группа диалоговых окон описана в модуле tkinter.messagebox. Это окна различных сообщений, выбора по принципу «да-нет». Дополним нашу программу: «Редактор файлов». Листинг:
from tkinter import *
from tkinter.filedialog import *
from tkinter.messagebox import *
import fileinput
# открытие файла
def _open():
op = askopenfilename()
print(op)
f = open(op, "r", encoding='utf-8')
content = f.read()
txt.delete(1.0,END)
txt.insert(END, content)
# закрытие файла
def _save():
sa = asksaveasfilename()
content = txt.get(1.0,END)
f = open(sa, "w", encoding='utf-8')
f.write(content)
f.close()
# выход из программы
def close_win():
if askyesno("Выход", "Вы уверены?"):
root.destroy()
# вывод справки
def about():
showinfo("Редактор", "Простейший текстовый редактор от сайта: https://it-black.ru")
root = Tk()
root.title("Текстовый редактор v 2.0")
root.minsize(width=500, height=400)
m = Menu(root)
root.config(menu=m)
fm = Menu(m)
m.add_cascade(label="Файл", menu=fm)
fm.add_command(label="Открыть...", command=_open)
fm.add_command(label="Сохранить как...", command=_save)
fm.add_command(label="Выход", command=close_win)
hm = Menu(m)
m.add_cascade(label="Справка", menu=hm)
hm.add_command(label="О программе", command=about)
txt = Text(root, width=40, height=15, font=" Courier 14")
txt.pack()
root.mainloop()
Мы создали две дополнительные функции и пункты меню. В функции about происходит вызов окна showinfo, позволяющее выводить сообщение для пользователя с кнопкой ОК. Первый аргумент — это то, что выведется в заголовке окна, а второй — то, что будет содержаться в теле сообщения.
В функции close_win вызывается окно askyenso, которое позволяет получить от пользователя два ответа (true и false). При положительном ответе сработает ветка if и главное окно будет закрыто. В случае нажатия пользователем кнопки «Нет» окно просто закроется.
Вывод программы:
В функции close_win вызывается окно askyenso, которое позволяет получить от пользователя два ответа (true и false). При положительном ответе сработает ветка if и главное окно будет закрыто. В случае нажатия пользователем кнопки «Нет» окно просто закроется.
Вывод программы:
В данной статье мы создали неплохой текстовый редактор и теперь вы можете самостоятельно его улучшать. Пишите в комментариях свои варианты нашей программы.
Видео по созданию программы:
Видео по созданию программы: