KUAY
unknown
python
3 years ago
6.5 kB
6
Indexable
from tkinter import *
import tkinter.filedialog as ask
import tkinter.messagebox as mb
import csv, operator
import webbrowser
from abc import ABC, abstractmethod
class Window(ABC):
def __init__(self,win = None):
self.win = win
self.win = Tk()
self.win.geometry('300x400')
self.win.title('Contact Book')
self.win.config(bg='grey')
self.label = Label(self.win, text="CONTACTBOOK", font=('arial', 20)).place(relx=0.5, rely=0 ,anchor='n')
self.contact = [['','','','',''],]
self.name = StringVar()
self.num = StringVar()
self.email = StringVar()
self.instagram = StringVar()
self.facebook = StringVar()
self.wish = StringVar()
# self.iglink = f'https://www.instagram.com/{}'
Button(self.win,text=" ADD",bg='White',fg= 'Black', command = self.add).place(relx=0.5, rely=0.2, anchor='n')
Button(self.win,text="VIEW",bg='White',fg='Black', command = self.view).place(relx=0.5, rely=0.3, anchor='n')
Button(self.win,text="DELETE",bg='White',fg='Black', command = self.delete).place(relx=0.5, rely=0.4, anchor='n')
Button(self.win,text="EXIT",bg='red',fg='White', command = self.quit).place(relx=0.5, rely=0.8, anchor='n')
self.win.mainloop()
@abstractmethod
def add(self):
pass
@abstractmethod
def view(self):
pass
@abstractmethod
def clear(self):
pass
@abstractmethod
def quit(self):
pass
class insidecommand(Window):
def enter(self):
with open("database.csv", "a") as f:
try:
if self.name != '' and self.num != '' and self.email != '' and self.instagram != '' and self.facebook != '':
f.write(f"{self.name.get()},{self.num.get()},{self.email.get()},{self.instagram.get()},{self.facebook.get()}\n")
except ValueError:
if self.name == '' or self.num == '' or self.email == '' or self.instagram == '' or self.facebook == '':
mb.showerror(title="ValueError", message='Please add - to the empty entry')
self.add.destroy()
def quitForView(self):
self.view.destroy()
def deleteContact(self):
with open('database.csv') as f:
self.reader = csv.reader(f, delimiter=',')
self.reader = sorted(self.reader, key=operator.itemgetter(0))
self.readname = [item[0] for item in self.reader]
print(self.readname)
try:
if self.wish.get() in self.readname:
for row in self.reader:
if row[0] != self.wish.get():
mb.showinfo(message='done')
elif self.wish.get() not in self.readname:
raise ValueError
except ValueError:
mb.showerror(title="Can't be found",message='โง่ ทำใหม่\nไอควายยยย')
def clear(self):
with open("database.csv", 'w') as f:
f.write('')
class Contact(insidecommand, Window):
def __init__(self, win= None):
super().__init__(win)
# self.add()
def add(self):
self.add = Toplevel(self.win)
self.add.title("ADD")
self.add.geometry('200x150')
self.add.config(bg='#722F37')
Label(self.add, text="Name: ", bg='#722F37').grid(row=0, column=0)
Entry(self.add, textvariable=self.name).grid(row=0, column=1)
Label(self.add, text="Number: ", bg='#722F37').grid(row=1, column=0)
Entry(self.add, textvariable=self.num).grid(row=1, column=1)
Label(self.add, text="Email: ", bg='#722F37').grid(row=2, column=0)
Entry(self.add, textvariable=self.email).grid(row=2, column=1)
Label(self.add, text="Instagram: ", bg='#722F37').grid(row=3, column=0)
Entry(self.add, textvariable=self.instagram).grid(row=3, column=1)
Label(self.add, text="Facebook: ", bg='#722F37').grid(row=4, column=0)
Entry(self.add, textvariable=self.facebook).grid(row=4, column=1)
Button(self.add, text="Enter", bg='white', command=self.enter).place(relx=1.0, rely=1.0, anchor='se')
def view(self):
self.view = Toplevel(self.win)
self.view.title("VIEW")
self.view.geometry('600x500')
self.view.config(bg='#023020')
Label(self.view, text="%-15s%-30s%-45s%-20s%-20s"%('Name','Phone Number','Email','Instagram','Facebook'),bg='black',fg='white').place(relx=0.07,rely=0.1)
try:
with open('database.csv') as f:
self.reader = csv.reader(f, delimiter=',')
self.reader = sorted(self.reader, key=operator.itemgetter(0))
y = 0.2
for i in self.reader:
Label(self.view, text="%-15s%-30s%-45s%-20s%-20s"%(i[0],i[1],i[2],i[3],i[4]),bg='black',fg='white').place(relx=0.07,rely=y)
y += 0.1
except:
self.view.destroy()
mb.showerror(message='Database file not found\nPossibility:\n\tFile is in wrong location\n\tFile got deleted')
Button(self.view, text='Quit', command=self.quitForView).place(relx=0.5, rely=0.8, anchor='n')
def delete(self):
self.delete = Toplevel(self.win)
self.delete.title("delete")
self.delete.geometry('600x300')
self.delete.config(bg='#FFF44F')
Label(self.delete, text=" Delete Contact", font=('arial', 20), bg='Black', fg='White').place(relx=0.5, rely=0 ,anchor='n')
Label(self.delete, text="Name: ", bg='#FFF44F', font=('arial', 15)).place(relx=0.5, rely=0.2 ,anchor='n')
Entry(self.delete, textvariable=self.wish).place(relx=0.5, rely=0.3 ,anchor='n')
Button(self.delete, text='Delete', command=self.deleteContact).place(relx=0.4, rely=0.4, anchor='n')
Button(self.delete, text='Clear All', command=self.clear).place(relx=0.6, rely=0.4, anchor='n')
def quit(self):
self.win.destroy()
if __name__ == '__main__':
Contact()Editor is loading...