Рубрики
Без рубрики

Сделайте Простой текстовый редактор с помощью Python :

Привет всем! Сегодня мы сделаем простой текстовый редактор, используя Python и Tkinter. … Теги с Python, учебником, Tkinter.

Привет всем!

Сегодня мы сделаем простой текстовый редактор, используя Python и Tkinter.

Что такое ткинтер?

  • Это стандартный интерфейс Python для TK GUI Toolkit, поставляемых с Python.

Откуда я знаю, если я установил Tkinter?

  • Скорее всего, вы бы его установили. Попробуйте работает python -m tkinter в вашей консоли. Если это не дает ошибку, это означает, что у вас установлен TKinter и готовый к использованию!

У меня нет TKinter установлена, что мне делать?

  • Просто убедитесь, что у вас есть Python и PiP, а затем запустите PIP Установите TK в консоли.

Предварительные условия

  • Python 3.9.x.
  • Редактор кода (VSCode, Pycharm и т. Д.)

Теперь, когда это с пути, давайте начнем !!!

Учебник начинается здесь …

Во-первых, мы сделаем структуру файла вроде вещей. Нам понадобится эти файлы (они могут быть в корневом каталоге):

  • main.py
  • file_menu.py
  • edit_menu.py
  • format_menu.py
  • help_menu.py

main.py

Для main.py Файл, мы начнем, импортируя библиотеку TKinter и файлов меню, которые мы сделали только сейчас:

# import statements
from tkinter import *
from tkinter.filedialog import *
from tkinter.messagebox import *
from tkinter.font import Font
from tkinter.scrolledtext import *
import file_menu
import edit_menu
import format_menu
import help_menu

Тогда мы сделаем окно TKinter, как это:

# creating a tkinter window
root = Tk()

Затем мы дадим наш текстовый редактор некоторых измерений и название, как это:

# gives the window a title and dimensions
root.title("TextEditor-newfile")
root.geometry("300x250+300+300")
root.minsize(width=400, height=400)

Затем мы добавим этот код:

# i don't really know how to explain what this code does, but yeah it's important
text = ScrolledText(root, state='normal', height=400, width=400, wrap='word', pady=2, padx=3, undo=True)
text.pack(fill=Y, expand=1)
text.focus_set()

Тогда мы сделаем Менубар :

# creating a menubar
menubar = Menu(root)

Затем мы добавим наши меню на меню:

# adding our menus to the menubar
file_menu.main(root, text, menubar)
edit_menu.main(root, text, menubar)
format_menu.main(root, text, menubar)
help_menu.main(root, text, menubar)

Наконец, мы добавим этот код, чтобы этот редактор на самом деле функционирует:

# running the whole program
root.mainloop()

Давайте перейдем к нашим файлам меню, пожалуйста, мы?

file_menu.py

Во-первых, мы импортируем вещи:

# import statements
from tkinter import *
from tkinter.filedialog import *
from tkinter.messagebox import *

Тогда мы сделаем класс Файл :

# creating File
class File():

Затем мы добавим все функции, которые нам нужно для нашего Файл класс:

    def newFile(self):
        self.filename = "Untitled"
        self.text.delete(0.0, END)

    def saveFile(self):
        try:
            t = self.text.get(0.0, END)
            f = open(self.filename, 'w')
            f.write(t)
            f.close()
        except:
            self.saveAs()

    def saveAs(self):
        f = asksaveasfile(mode='w', defaultextension='.txt')
        t = self.text.get(0.0, END)
        try:
            f.write(t.rstrip())
        except:
            showerror(title="Oops!", message="Unable to save file...")

    def openFile(self):
        f = askopenfile(mode='r')
        self.filename = f.name
        t = f.read()
        self.text.delete(0.0, END)
        self.text.insert(0.0, t)

    def quit(self):
        entry = askyesno(title="Quit", message="Are you sure you want to quit?")
        if entry == True:
            self.root.destroy()

    def __init__(self, text, root):
        self.filename = None
        self.text = text
        self.root = root

В приведенном выше коде мы добавили некоторые функции:

  • Новый файл
  • Сохранить файл
  • Сохранить файл В виде
  • Открыть файл
  • Бросить редактор

Затем мы сделаем основную функцию (обратите внимание, что эта функция не должна быть под Файл Класс):

def main(root, text, menubar):
    filemenu = Menu(menubar)
    objFile = File(text, root)
    filemenu.add_command(label="New", command=objFile.newFile)
    filemenu.add_command(label="Open", command=objFile.openFile)
    filemenu.add_command(label="Save", command=objFile.saveFile)
    filemenu.add_command(label="Save As...", command=objFile.saveAs)
    filemenu.add_separator()
    filemenu.add_command(label="Quit", command=objFile.quit)
    menubar.add_cascade(label="File", menu=filemenu)
    root.config(menu=menubar)

В приведенном выше коде мы сделали Главная Функция, которая в основном выполняет все функции под Файл класс.

Наконец, мы добавляем некоторую ошибку вроде матух:

if __name__ == "__main__":
    print("Please run 'main.py'")

edit_menu.py

Мы начнем с помощью импорта материала:

# import statements
from tkinter import *
from tkinter.simpledialog import *
from tkinter.filedialog import *
from tkinter.messagebox import *

Тогда мы сделаем класс Редактировать :

# creating Edit
class Edit():

Затем мы добавим все необходимые функции при этом Редактировать класс:

    def popup(self, event):
        self.rightClick.post(event.x_root, event.y_root)

    def copy(self, *args):
        sel = self.text.selection_get()
        self.clipboard = sel

    def cut(self, *args):
        sel = self.text.selection_get()
        self.clipboard = sel
        self.text.delete(SEL_FIRST, SEL_LAST)

    def paste(self, *args):
        self.text.insert(INSERT, self.clipboard)

    def selectAll(self, *args):
        self.text.tag_add(SEL, "1.0", END)
        self.text.mark_set(0.0, END)
        self.text.see(INSERT)

    def undo(self, *args):
        self.text.edit_undo()

    def redo(self, *args):
        self.text.edit_redo()

    def find(self, *args):
        self.text.tag_remove('found', '1.0', END)
        target = askstring('Find', 'Search String:')

        if target:
            idx = '1.0'
            while 1:
                idx = self.text.search(target, idx, nocase=1, stopindex=END)
                if not idx: break
                lastidx = '%s+%dc' % (idx, len(target))
                self.text.tag_add('found', idx, lastidx)
                idx = lastidx
            self.text.tag_config('found', foreground='white', background='blue')

    def __init__(self, text, root):
        self.clipboard = None
        self.text = text
        self.rightClick = Menu(root)

В приведенном выше коде мы делаем некоторые функции:

  • Скопировать
  • Резать
  • Вставить
  • Выбрать все
  • Отменить
  • Редо
  • Находить

Тогда мы делаем Главная Функция за пределами Редактировать класс:

def main(root, text, menubar):

    objEdit = Edit(text, root)

    editmenu = Menu(menubar)
    editmenu.add_command(label="Copy", command=objEdit.copy, accelerator="Ctrl+C")
    editmenu.add_command(label="Cut", command=objEdit.cut, accelerator="Ctrl+X")
    editmenu.add_command(label="Paste", command=objEdit.paste, accelerator="Ctrl+V")
    editmenu.add_command(label="Undo", command=objEdit.undo, accelerator="Ctrl+Z")
    editmenu.add_command(label="Redo", command=objEdit.redo, accelerator="Ctrl+Y")
    editmenu.add_command(label="Find", command=objEdit.find, accelerator="Ctrl+F")
    editmenu.add_separator()
    editmenu.add_command(label="Select All", command=objEdit.selectAll, accelerator="Ctrl+A")
    menubar.add_cascade(label="Edit", menu=editmenu)

    root.bind_all("", objEdit.undo)
    root.bind_all("", objEdit.redo)
    root.bind_all("", objEdit.find)
    root.bind_all("Control-a", objEdit.selectAll)

    objEdit.rightClick.add_command(label="Copy", command=objEdit.copy)
    objEdit.rightClick.add_command(label="Cut", command=objEdit.cut)
    objEdit.rightClick.add_command(label="Paste", command=objEdit.paste)
    objEdit.rightClick.add_separator()
    objEdit.rightClick.add_command(label="Select All", command=objEdit.selectAll)
    objEdit.rightClick.bind("", objEdit.selectAll)

    text.bind("", objEdit.popup)

    root.config(menu=menubar)

Наконец, мы сделаем некоторые ошибки.

if __name__ == "__main__":
    print("Please run 'main.py'")

format_menu.py

Мы начнем с помощью импорта материала:

# import statements
from tkinter import *
from tkinter.colorchooser import askcolor
from tkinter.font import Font, families
from tkinter.scrolledtext import *
import time

Тогда мы делаем класс Формат :

class Format():

Затем мы добавляем необходимые функции:

    def __init__(self, text):
        self.text = text

    def changeBg(self):
        (triple, hexstr) = askcolor()
        if hexstr:
            self.text.config(bg=hexstr)

    def changeFg(self):
        (triple, hexstr) = askcolor()
        if hexstr:
            self.text.config(fg=hexstr)

    def bold(self, *args):  # Works only if text is selected
        try:
            current_tags = self.text.tag_names("sel.first")
            if "bold" in current_tags:
                self.text.tag_remove("bold", "sel.first", "sel.last")
            else:
                self.text.tag_add("bold", "sel.first", "sel.last")
                bold_font = Font(self.text, self.text.cget("font"))
                bold_font.configure(weight="bold")
                self.text.tag_configure("bold", font=bold_font)
        except:
            pass

    def italic(self, *args):  # Works only if text is selected
        try:
            current_tags = self.text.tag_names("sel.first")
            if "italic" in current_tags:
                self.text.tag_remove("italic", "sel.first", "sel.last")
            else:
                self.text.tag_add("italic", "sel.first", "sel.last")
                italic_font = Font(self.text, self.text.cget("font"))
                italic_font.configure(slant="italic")
                self.text.tag_configure("italic", font=italic_font)
        except:
            pass

    def underline(self, *args):  # Works only if text is selected
        try:
            current_tags = self.text.tag_names("sel.first")
            if "underline" in current_tags:
                self.text.tag_remove("underline", "sel.first", "sel.last")
            else:
                self.text.tag_add("underline", "sel.first", "sel.last")
                underline_font = Font(self.text, self.text.cget("font"))
                underline_font.configure(underline=1)
                self.text.tag_configure("underline", font=underline_font)
        except:
            pass

    def overstrike(self, *args):  # Works only if text is selected
        try:
            current_tags = self.text.tag_names("sel.first")
            if "overstrike" in current_tags:
                self.text.tag_remove("overstrike", "sel.first", "sel.last")
            else:
                self.text.tag_add("overstrike", "sel.first", "sel.last")
                overstrike_font = Font(self.text, self.text.cget("font"))
                overstrike_font.configure(overstrike=1)
                self.text.tag_configure("overstrike", font=overstrike_font)
        except:
            pass

    def addDate(self):
        full_date = time.localtime()
        day = str(full_date.tm_mday)
        month = str(full_date.tm_mon)
        year = str(full_date.tm_year)
        date = day + '/' + month + '/' + year
        self.text.insert(INSERT, date, "a")

В приведенном выше коде мы добавили некоторые функции:

  • Изменить фон
  • Изменить группу шрифтов
  • Жирный текст
  • Италический текст
  • Подчеркивать текст
  • Чрезмерно ударить текст
  • Добавить дату

Тогда мы делаем Главная Функция:

def main(root, text, menubar):
    objFormat = Format(text)

    fontoptions = families(root)
    font = Font(family="Arial", size=10)
    text.configure(font=font)

    formatMenu = Menu(menubar)

    fsubmenu = Menu(formatMenu, tearoff=0)
    ssubmenu = Menu(formatMenu, tearoff=0)

    for option in fontoptions:
        fsubmenu.add_command(label=option, command=lambda option=option: font.configure(family=option))
    for value in range(1, 31):
        ssubmenu.add_command(label=str(value), command=lambda value=value: font.configure(size=value))

    formatMenu.add_command(label="Change Background", command=objFormat.changeBg)
    formatMenu.add_command(label="Change Font Color", command=objFormat.changeFg)
    formatMenu.add_cascade(label="Font", underline=0, menu=fsubmenu)
    formatMenu.add_cascade(label="Size", underline=0, menu=ssubmenu)
    formatMenu.add_command(label="Bold", command=objFormat.bold, accelerator="Ctrl+B")
    formatMenu.add_command(label="Italic", command=objFormat.italic, accelerator="Ctrl+I")
    formatMenu.add_command(label="Underline", command=objFormat.underline, accelerator="Ctrl+U")
    formatMenu.add_command(label="Overstrike", command=objFormat.overstrike, accelerator="Ctrl+T")
    formatMenu.add_command(label="Add Date", command=objFormat.addDate)
    menubar.add_cascade(label="Format", menu=formatMenu)

    root.bind_all("", objFormat.bold)
    root.bind_all("", objFormat.italic)
    root.bind_all("", objFormat.underline)
    root.bind_all("", objFormat.overstrike)

    root.grid_columnconfigure(0, weight=1)
    root.resizable(True, True)

    root.config(menu=menubar)

Наконец, мы добавляем некоторые ошибки по обработке ошибок:

if __name__ == "__main":
    print("Please run 'main.py'")

help_menu.py

Мы начнем с импорта материалов

# import statements
from tkinter import *
from tkinter.messagebox import *

Тогда мы сделаем Помогите класс и добавить О функция к нему:

class Help():
    def about(root):
        showinfo(title="About", message="Hello, this is a text editor made by Insidious using Python")

Затем мы делаем Главная Функция:

def main(root, text, menubar):

    help = Help()

    helpMenu = Menu(menubar)
    helpMenu.add_command(label="About", command=help.about)
    menubar.add_cascade(label="Help", menu=helpMenu)

    root.config(menu=menubar)

Наконец, мы добавляем некоторую ошибку.

if __name__ == "__main":
    print("Please run 'main.py'")

И это должно быть это!

Проект на Github

Спасибо за чтение этого поста до конца. Надеюсь, это помогло тебе !!!

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

Социал

Раздор Github Instagram.

Спасибо!!!

Оригинал: “https://dev.to/insidiousthedev/make-a-simple-text-editor-using-python-31bd”