PYTHON How to output and input data in tkinter using a pickle file?

Did initially under the console, not under tkinter. How to make everything written in ScrolledText (tab3) and enter data in the interface (tab1, tab2, tab4, tab5)

from sys import argv
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
from tkinter.ttk import Radiobutton
from tkinter import scrolledtext


class AddressBook:
    def __init__(self, fname: str = 'ab.pickle'):
        self.__fname = fname
        self.__records = dict()
        if self.load() < 0:
            messagebox.showinfo('Информация', 'Создание книги \'%s\'...' % (fname))
            self.save()

    def save(self):
        with open(self.__fname, 'wb') as f:
            dump(self.__records, f)

    def load(self) -> int:
        try:
            with open(self.__fname, 'rb') as f:
                try:
                    self.__records = load(f)
                except (EOFError, ValueError, UnpicklingError):
                    messagebox.showinfo('Информация', '\'%s\' поврежден. Удалите его...' \
                          % (self.__fname))
                    from os import remove
                    remove(self.__fname)
                    return -1
        except FileNotFoundError:
            messagebox.showinfo('Информация', 'Файл не найден \'%s\'' % (self.__fname))
            return -2
        messagebox.showinfo('Информация', '\'%s\' открыт' % (self.__fname))
        self.dump()
        return 0

    def add(self):
        name = input("Имя: ")
        addr = input("Адрес: ")
        self.__records[name] = addr
        messagebox.showinfo('Информация', 'Адрес успешно добавлен!')

    def delete(self):
        name = input("Имя: ")
        if self.__records.get(name) == None:
            messagebox.showinfo('Информация', 'Такого человека не существет!')
            return
        del self.__records[name]
        messagebox.showinfo('Информация', 'Адрес успешно удален!')

    def dump(self):
        for name, addr in self.__records.items():
            print('[Имя и адрес] \'%s\': \'%s\'' % (name, addr))

    def modify(self):
        name = input("Имя: ")
        if self.__records.get(name) == None:
            messagebox.showinfo('Информация', 'Такого человека не существет!')
            return
        addr = input("Адрес: ")
        self.__records[name] = addr
        messagebox.showinfo('Информация', 'Адрес успешно изменен!')

    def find(self):
        name = input("Имя: ")
        if self.__records.get(name) == None:
            messagebox.showinfo('Информация', 'Такого человека не существет!')
            return
        print(self.__records[name])


if len(argv) - 1 == 1:
    ab = AddressBook(argv[1])
else:
    ab = AddressBook()


window = Tk()
window.title("Адресная книга")
window.geometry('480x300')
tab_control = ttk.Notebook(window)
tab1 = ttk.Frame(tab_control)
tab2 = ttk.Frame(tab_control)
tab3 = ttk.Frame(tab_control)
tab4 = ttk.Frame(tab_control)
tab5 = ttk.Frame(tab_control)
tab_control.add(tab1, text="Добавить")
tab_control.add(tab2, text="Удалить")
tab_control.add(tab3, text="Список")
tab_control.add(tab4, text="Изменение")
tab_control.add(tab5, text="Поиск")
tab_control.pack(expand=1, fill='both')
btn = Button(tab1, text="Добавить адрес", command=ab.add)
btn.grid(column=1, row=1)
btn = Button(tab2, text="Удалить адрес", command=ab.delete)
btn.grid(column=1, row=5)
text = scrolledtext.ScrolledText(tab3, width=50, height=10, bg="white", fg="black")
text.grid(row=0, column=0, columnspan=2, padx=35)
btn = Button(tab3, text="Вывести все адреса", command=ab.dump)
btn.grid(column=1, row=10)
btn = Button(tab4, text="Изменить адрес", command=ab.modify)
btn.grid(column=1, row=15)
btn = Button(tab5, text="Найти адрес", command=ab.find)
btn.grid(column=1, row=20)
window.mainloop()


ab.save()

Ответы (0 шт):