ООП текстовый редактор

herman1921

Новичок
Пользователь
Июл 15, 2021
13
0
1
Всем привет.
Подскажите пожалуйста, как будет выглядеть часть кода, если надо добавитьscrollbar?

Python:
import tkinter as tk
from tkinter.filedialog import *
import os

prog_window = tk.Tk() # переменная с помощью которой вызываем функции из библиотек
prog_window.title('Редактор текста/Блокнот') # название окна

text_ed = tk.Frame(master=prog_window, height=700, width=700) # окно текстового редактора
text_ed.pack(fill=tk.BOTH, side=tk.LEFT, expand=True) # расположение

text_fld = tk.Text(master=text_ed) # текстовое поле
text_fld.pack(fill=tk.BOTH) # расположение

load_button = tk.Button(master=text_ed, text='Загрузить') # содаём кнопку загрузить
save_as_button = tk.Button(master=text_ed, text='Сохранить') # содаём кнопку сохранить

load_button.pack(side=tk.RIGHT) # расположение кнопки загрузить
save_as_button.pack(side=tk.LEFT) # расположение кнопки сохранить

def load_file(event):
    file = askopenfilename(defaultextension='txt') # открываем формат txt
    text_fld.delete(1.0, tk.END) # очищаем текстовое поле
    text_fld.insert(1.0, open(file).read()) # загружаем информацию из файла
    return 'break'

def save_as_file(event):
    file = asksaveasfilename(defaultextension='txt') # сохраняем формат txt
    open(file, 'w').write(text_fld.get(1.0, tk.END)) # записываем инф в файл
    return 'break'

load_button.bind("<Button-1>", load_file) # назначить кнопке функцию загрузить и реагирование самой кнопки на левую кнопку мыши
save_as_button.bind("<Button-1>", save_as_file) # назначить кнопке функцию сохранить и реагирование самой кнопки на левую кнопку мыши

prog_window.mainloop()
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 670
477
83
в вашем коде нет ооп...
я взял на себя смелость подправить ваши ошибки и добавить ооп...
Python:
import tkinter as tk
from tkinter import filedialog


class MainWindow():
    def __init__(self):
        window = tk.Tk()

        scrollbar = tk.Scrollbar(window)
        scrollbar.pack(side="right", fill="y")

        self.text_fld = tk.Text(window, yscrollcommand=scrollbar.set)  # текстовое поле
        self.text_fld.pack(fill=tk.BOTH)  # расположение

        load_button = tk.Button(window, text='Загрузить', command=self.load_file)  # содаём кнопку загрузить
        save_as_button = tk.Button(window, text='Сохранить', command=self.save_as_file)  # содаём кнопку сохранить

        load_button.pack(side=tk.RIGHT)  # расположение кнопки загрузить
        save_as_button.pack(side=tk.LEFT)  # расположение кнопки сохранить

        scrollbar.config(command=self.text_fld.yview)

        window.mainloop()

    def load_file(self):
        file = filedialog.askopenfilename(defaultextension='txt')  # открываем формат txt
        if not file:
            return
        self.text_fld.delete(1.0, tk.END)  # очищаем текстовое поле
        with open(file, "r") as f:
            self.text_fld.insert(1.0, f.read())  # загружаем информацию из файла

    def save_as_file(self):
        file = filedialog.asksaveasfilename(defaultextension='txt')  # сохраняем формат txt
        if not file:
            return
        with open(file, "w") as f:
            f.write(self.text_fld.get(1.0, tk.END))  # записываем инф в файл


if __name__ == "__main__":
    mainwindow = MainWindow()
 
  • Мне нравится
Реакции: herman1921

herman1921

Новичок
Пользователь
Июл 15, 2021
13
0
1
в вашем коде нет ооп...
я взял на себя смелость подправить ваши ошибки и добавить ооп...
Python:
import tkinter as tk
from tkinter import filedialog


class MainWindow():
    def __init__(self):
        window = tk.Tk()

        scrollbar = tk.Scrollbar(window)
        scrollbar.pack(side="right", fill="y")

        self.text_fld = tk.Text(window, yscrollcommand=scrollbar.set)  # текстовое поле
        self.text_fld.pack(fill=tk.BOTH)  # расположение

        load_button = tk.Button(window, text='Загрузить', command=self.load_file)  # содаём кнопку загрузить
        save_as_button = tk.Button(window, text='Сохранить', command=self.save_as_file)  # содаём кнопку сохранить

        load_button.pack(side=tk.RIGHT)  # расположение кнопки загрузить
        save_as_button.pack(side=tk.LEFT)  # расположение кнопки сохранить

        scrollbar.config(command=self.text_fld.yview)

        window.mainloop()

    def load_file(self):
        file = filedialog.askopenfilename(defaultextension='txt')  # открываем формат txt
        if not file:
            return
        self.text_fld.delete(1.0, tk.END)  # очищаем текстовое поле
        with open(file, "r") as f:
            self.text_fld.insert(1.0, f.read())  # загружаем информацию из файла

    def save_as_file(self):
        file = filedialog.asksaveasfilename(defaultextension='txt')  # сохраняем формат txt
        if not file:
            return
        with open(file, "w") as f:
            f.write(self.text_fld.get(1.0, tk.END))  # записываем инф в файл


if __name__ == "__main__":
    mainwindow = MainWindow()

Спасибо большое.

А как сделать так, чтобы при сохранении данных в выбранный файл редактор
записывал в специальный файл настроек settings.json информацию о том, куда в последний раз были сохранены
данные. Файл настроек должен иметь формат json-файла (словаря).
Например: {'file_name':'C:/Users/ozon/p18/13/text_editor.txt'}
И сделать так, чтобы при запуске приложения текстовый редактор автоматически находил файл settings.json и
подгружал в текстовый редактор последние сохраненные пользователем данные.

Создаю пустой словарь.
Добавляю условие:
Python:
if os.path.exists('settings.json'):
    with open('settings.json', 'r') as file:
        data_file = json.load(file)
        text_fld.insert(1.0, open(data_file['file_name']).read())
else:
    pass

в функцию сохранения добавляю следующее:
Python:
global setting  
    setting['file_name'] = file
    with open('settings.json', 'w') as settings_file:
        json.dump(setting, settings_file )
    return 'break'

Это за пределами класса или внутри будет?
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 670
477
83
внутри класса...
Python:
import tkinter as tk
from tkinter import filedialog
import os
import json


class MainWindow():
    def __init__(self):
        self.setting = {}

        window = tk.Tk()

        scrollbar = tk.Scrollbar(window)
        scrollbar.pack(side="right", fill="y")

        self.text_fld = tk.Text(window, yscrollcommand=scrollbar.set)  # текстовое поле
        self.text_fld.pack(fill=tk.BOTH)  # расположение

        load_button = tk.Button(window, text='Загрузить', command=self.load_file)  # содаём кнопку загрузить
        save_as_button = tk.Button(window, text='Сохранить', command=self.save_as_file)  # содаём кнопку сохранить

        load_button.pack(side=tk.RIGHT)  # расположение кнопки загрузить
        save_as_button.pack(side=tk.LEFT)  # расположение кнопки сохранить

        scrollbar.config(command=self.text_fld.yview)

        self.load_json()

        window.mainloop()

    def load_json(self):
        if os.path.exists('settings.json'):
            with open('settings.json', 'r') as file:
                data_file = json.load(file)
                self.text_fld.insert(1.0, open(data_file['file_name']).read())

    def load_file(self):
        file = filedialog.askopenfilename(defaultextension='txt')  # открываем формат txt
        if not file:
            return
        self.text_fld.delete(1.0, tk.END)  # очищаем текстовое поле
        with open(file, "r") as f:
            self.text_fld.insert(1.0, f.read())  # загружаем информацию из файла

    def save_as_file(self):
        file = filedialog.asksaveasfilename(defaultextension='txt')  # сохраняем формат txt
        if not file:
            return
        with open(file, "w") as f:
            f.write(self.text_fld.get(1.0, tk.END))  # записываем инф в файл
        self.setting['file_name'] = file
        with open('settings.json', 'w') as settings_file:
            json.dump(self.setting, settings_file)


if __name__ == "__main__":
    mainwindow = MainWindow()
файл json должен лежать в той же директории, где и скрипт...
 
Последнее редактирование:
  • Мне нравится
Реакции: herman1921

Форум IT Специалистов