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()