KUAY

 avatar
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...