Текстовый редактор на Python (Tkinter)

Текстовый редактор на Python (Tkinter)

Программисты часто говорят что не стоит изобретать велосипед писав простые аналоги уже существующего софта. Но ведь иногда простые на первый взгляд вещи, могут быть сложны в реализации. Ну и с другой стороны, что делать если просто хочется проверить свой скилл в программировании чисто для себя. В таких ситуациях и начинаешь реализовывать простенькие проекты создавая аналоги существующего софта. Вот и в один из таких моментов я и решил написать свой блокнот или же простенький текстовый редактор на python (Tkinter). Далее будет ссылка на GitHub репозиторий проекта.

Писать его я решил на языке Python. Интерфейс я буду создавать используя библиотеку tkinter. Чтобы её установить нужно выполнить следующие команды (в зависимости от вашей ОС):

Windows в командной строке выполняем:

pip install tkinter

Linux в терминале выполняем (Дистрибутивы на основе Debian):

apt-get install python-tk

И так, основную библиотеку я установил, теперь перейдём к подключению самого tkinter и других его функций.

Подключаем библиотеку Tkinter:

import tkinter
from tkinter import *

Для того чтобы добавить возможность открывать и сохранять файлы, нам нужно диалоговое окно. Для этого в Tkinter есть свои функции. Импортируем их:

from tkinter.filedialog import asksaveasfile, askopenfile

Если у нас будут возникать ошибки, нам их нужно красиво выводить. Для этого импортируем следующую функцию:

from tkinter.messagebox import showerror

Ну и для информационных окон есть своя функция:

from tkinter import messagebox

Теперь давайте сделаем интерфейс программы. Переменная root будет отвечать за вызов функций из библиотеки

root = tkinter.Tk()

В дальнейшем мы будем обращаться к ней чтобы задавать параметры отображения окна программы, вывод окон и тд. К примеру создадим заголовок программы

root.title("Simple Text editor")

Укажем размеры окна

root.minsize(width=500, height=400)
root.maxsize(width=500, height=400)

Теперь создадим текстовое поле

text = tkinter.Text(root, width=400, height=400, wrap="word")

Какое текстовое поле без скроллбара, нужно и его добавить и привязать к текстовому полю чтобы он понимал когда нужно прокручивать текстовое поле

scrollb = Scrollbar(root, orient=VERTICAL, command=text.yview)
scrollb.pack(side="right", fill="y")
text.configure(yscrollcommand=scrollb.set)

Сам интерфейс я решил отображать с помощью метода pack. В этой библиотеки есть много разных вариантов отображения интерфейса и позиционирование объектов на окне. Детально можете ознакомиться в документации

Выводим интерфейс:

text.pack()

Что это за программа если в ней нет меню. В Tkinter для меню есть специальная функция menu:

menuBar = tkinter.Menu(root)

Определяем список кнопок в выпадающем меню Файл

fileMenu = tkinter.Menu(menuBar)
fileMenu.add_command(label="New")
fileMenu.add_command(label="Open")
fileMenu.add_command(label="Save")
fileMenu.add_command(label="Save as")	

Теперь определим структуру всего меню

menuBar.add_cascade(label="File", menu=fileMenu)
menuBar.add_cascade(label="Information")
menuBar.add_cascade(label="Exit", command=root.quit)

Теперь отобразим меню в самом интерфейсе программы:

root.config(menu=menuBar)
root.mainloop()

Это все вроде как хорошо, но нужно научить редактор основным его функциям. А его основные функции это: открытие файла, сохранение и создание нового файла. По этому давайте определяем переменную которая будет хранить имя нового файла

FILE_NAME = tkinter.NONE

и напишем функцию для создание нового файла

def new_file():
    global FILE_NAME
    FILE_NAME = "Untitled"
    text.delete('1.0', tkinter.END)

Работает все очень просто, мы просто очищаем текстовое поле от всех символов Теперь пишем функцию сохранением файла с стандартным именем

def save_file():
    data = text.get('1.0', tkinter.END)
    out = open(FILE_NAME, 'w')
    out.write(data)
    out.close()

Давайте создадим функцию для сохранения файла с возможностью выбора места хранения файла и имени

def save_as():
    out = asksaveasfile(mode='w', defaultextension='.txt')
    data = text.get('1.0', tkinter.END)
    try:
        out.write(data.rstrip())
    except Exception:
        showerror(title="Error", message="Saving file error....")

И напишем функцию по открытию файла нашим редактором

def open_file():
    global FILE_NAME
    inp = askopenfile(mode="r")
    if inp is None:
        return
    FILE_NAME = inp.name

    data = inp.read()
    text.delete('1.0', tkinter.END)
    text.insert('1.0', data)

и напоследок давайте напишем функцию по открытию информационного окна с описанием нашей программы

def info():
    messagebox.showinfo("Information", "Simple Text editor\nby CoderLog")

Вот и всё, наш текстовой редактор готов. Вот так он выглядит:

Текстовый редактор на Python (Tkinter)

В идеале можно его скомпелировать в исполняемый файл библиотекой pyinstaller. Но об этом в следующий раз.

Ссылки:

Исходный код проекта можно посмотреть в этом репозитории: cdl-notepad

Видео о создании данного редактора: