KUAY
unknown
python
3 years ago
6.5 kB
5
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...