0% found this document useful (0 votes)
34 views14 pages

Telephone Directory CSV

This document contains code for a telephone directory program that allows users to add, search, and view contact entries stored in a CSV file. The code defines functions for validating user input, saving entries to the CSV file, displaying a data entry form, and searching the CSV file based on name, phone number or country fields. It initializes a GUI with entries, labels, buttons and a table to display results.

Uploaded by

FF gaming
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
34 views14 pages

Telephone Directory CSV

This document contains code for a telephone directory program that allows users to add, search, and view contact entries stored in a CSV file. The code defines functions for validating user input, saving entries to the CSV file, displaying a data entry form, and searching the CSV file based on name, phone number or country fields. It initializes a GUI with entries, labels, buttons and a table to display results.

Uploaded by

FF gaming
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 14

9/10/23, 1:25 PM Telephone Directory CSV.

py

import tkinter as tk
from tkinter import ttk
from PIL import Image, ImageTk
import csv
import traceback
from tkinter import font
from datetime import datetime
import os
from tkinter import messagebox

def validate_field():
try:
global a
global b
global c
global d
a=entry1.get()
b=entry2.get()
c=entry3.get()
d=entry4.get()

entry1.config(bg="white")
entry2.config(bg="white")
entry3.config(bg="white")
entry4.config(bg="white")

if a=="":
entry1.config(bg="red")
return False

if b=="":
entry2.config(bg="red")
return False

if d=="":
entry4.config(bg="red")
return False

if a.isnumeric():
entry1.config(bg="red")
return False

if d.isnumeric():
entry4.config(bg="red")
return False

if c!="":
if c.isnumeric():
entry1.config(bg="white")
entry2.config(bg="white")
entry3.config(bg="white")
entry4.config(bg="white")
return True

else:
entry3.config(bg="red")
return False

else:
entry1.config(bg="white")
entry2.config(bg="white")
entry3.config(bg="white")
entry4.config(bg="white")

return True
except:
handling_error()

file:///C:/Users/Amit/OneDrive/Desktop/.py/Telephone Directory CSV.py 1/14


9/10/23, 1:25 PM Telephone Directory CSV.py

def submit():
try:
if save():
messagebox.showinfo("Information", "The entry has been successfully saved!")
entry1.delete(0,tk.END)
entry2.delete(0,tk.END)
entry3.delete(0,tk.END)
entry4.delete(0,tk.END)
except:
handling_error()
def main_menu(window):
window.withdraw()
start()
def save():
try:
if validate_field():
try:
l=[]
p=int(b)

l.extend([a,p,c,d])
o=open("data.csv","a", newline="")
io=csv.writer(o, delimiter=",")
io.writerow(l)
o.close()

table.insert(parent="", index="end", text="", values=l)


return True
except:
if ValueError:
entry2.config(bg="red")
show_warning=messagebox.showwarning("Invalid Entry","Enter a valid entry")
return False
else:
show_warning=messagebox.showwarning("Invalid Entry","Enter a valid entry")
return False
except:
handling_error()
def writer():
try:
root.withdraw()
root2 = tk.Tk()
root2.geometry("485x378")
root2.title("Adding Data")

label1 = tk.Label(root2, text="Name:")


label1.grid(row=0, column=0, pady=2, padx=17, sticky=tk.W)

global entry1
entry1 = tk.Entry(root2)
entry1.grid(row=0, column=1, pady=2, sticky=tk.W)

label2 = tk.Label(root2, text="Phone Number:")


label2.grid(row=1, column=0, pady=2, padx=17, sticky=tk.W)

global entry2
entry2 = tk.Entry(root2)
entry2.grid(row=1, column=1, pady=2, sticky=tk.W)

label3 = tk.Label(root2, text="Alternate Phone Number:")


label3.grid(row=2, column=0, pady=2, padx=17, sticky=tk.W)

global entry3
entry3 = tk.Entry(root2)
entry3.grid(row=2, column=1, pady=2, sticky=tk.W)

label4 = tk.Label(root2, text="Country:")


label4.grid(row=3, column=0, pady=2, padx=17, sticky=tk.W)

file:///C:/Users/Amit/OneDrive/Desktop/.py/Telephone Directory CSV.py 2/14


9/10/23, 1:25 PM Telephone Directory CSV.py

global entry4
entry4 = tk.Entry(root2)
entry4.grid(row=3, column=1, pady=5, sticky=tk.W)

main_menu1 = tk.Button(root2, text="Main Menu", bd=1, command=lambda: main_menu(root2))


main_menu1.grid(row=4, column=1,padx=3 ,pady=5, sticky=tk.W)

save_btn=tk.Button(root2, text="Save", bd=1, command=submit)


save_btn.grid(row=4, column=0, padx=3, pady=5, sticky=tk.E)

validate_cmd = root.register(validate_field)
entry1.config(validate="focusout", validatecommand=(validate_cmd, "%P"))
entry2.config(validate="focusout", validatecommand=(validate_cmd, "%P"))
entry3.config(validate="focusout", validatecommand=(validate_cmd, "%P"))
entry4.config(validate="focusout", validatecommand=(validate_cmd, "%P"))

global table

table_frame = ttk.Frame(root2)
table_frame.grid(row=5, column=0, columnspan=2, pady=2, padx=17)

table_scroll = ttk.Scrollbar(table_frame)
table_scroll.pack(side="right", fill="y")

table = ttk.Treeview(table_frame, yscrollcommand=table_scroll.set)


table.pack(fill="both")

table_scroll.configure(command=table.yview)

table["columns"] = ("Name", "Phone Number", "Alternate Phone Number", "Country")


table.column("#0", width=0, stretch=tk.NO)
table.column("Name", width=100, anchor=tk.W)
table.column("Phone Number", width=100, anchor=tk.W)
table.column("Alternate Phone Number", width=150, anchor=tk.W)
table.column("Country", width=100, anchor=tk.W)

table.heading("#0", text="", anchor=tk.W)


table.heading("Name", text="Name", anchor=tk.CENTER)
table.heading("Phone Number", text="Phone Number", anchor=tk.CENTER)
table.heading("Alternate Phone Number", text="Alternate Phone Number", anchor=tk.CENTER)
table.heading("Country", text="Country", anchor=tk.CENTER)

global lines
lines = data()

root2.mainloop()
except:
handling_error()

def enter():
try:
global name_entry
global pn_entry
global country_entry
global lines

lines=data()
if table2.get_children():
table2.delete(*table2.get_children())

p = name_entry.get()
q = str(pn_entry.get())
r = country_entry.get()
count = 0

for i in lines:
if p != "" and q == "" and r == "":
if i[0] == p:

file:///C:/Users/Amit/OneDrive/Desktop/.py/Telephone Directory CSV.py 3/14


9/10/23, 1:25 PM Telephone Directory CSV.py

table2.insert(parent="", index="end", text="", values=i)


count += 1

elif q != "" and q == r:


if i[1] == int(q) or i[2] == int(q):
table2.insert(parent="", index="end", text="", values=i)
count += 1

elif r != "" and p == q:


if i[3] == r:
table2.insert(parent="", index="end", text="", values=i)
count += 1

elif p != "" and q != "" and r == "":


if i[0] == p and i[1] == int(q) or i[2] == int(q):
table2.insert(parent="", index="end", text="", values=i)
count += 1

elif p != "" and r != "" and q == "":


if i[0] == p and i[3] == r:
table2.insert(parent="", index="end", text="", values=i)
count += 1

elif q != "" and r != "" and p == "":


if i[3] == r and i[1] == int(q) or i[2] == int(q):
table2.insert(parent="", index="end", text="", values=i)
count += 1

elif p != "" and q != "" and r != "":


if i[3] == r and i[0] == p and i[1] == int(q) or i[2] == int(q):
table2.insert(parent="", index="end", text="", values=i)
count += 1

label9.config(text="There are " + str(count) + " search results")

name_entry.delete(0,tk.END)
pn_entry.delete(0,tk.END)
country_entry.delete(0,tk.END)

except:
handling_error()

def searcher():
try:
global root4
global table2
global e
global f
global h
global name_entry
global pn_entry
global country_entry

root.withdraw()
root4 = tk.Tk()
root4.geometry("520x430")
root4.title("Searching data")

label5 = tk.Label(root4, text="What categories do you want to search?")


label5.grid(row=0, column=1, padx=5, pady=6)

label6 = tk.Label(root4, text="Name")


label6.grid(row=2, column=0, padx=11, pady=6)

label7 = tk.Label(root4, text="Phone Number")


label7.grid(row=2, column=1, padx=11, pady=6)

label8 = tk.Label(root4, text="Country")

file:///C:/Users/Amit/OneDrive/Desktop/.py/Telephone Directory CSV.py 4/14


9/10/23, 1:25 PM Telephone Directory CSV.py

label8.grid(row=2, column=2, padx=11, pady=6)

name_entry= tk.Entry(root4)
name_entry.grid(row=3, column=0, padx=11, pady=6)

pn_entry = tk.Entry(root4)
pn_entry.grid(row=3, column=1, padx=11, pady=6)

country_entry = tk.Entry(root4)
country_entry.grid(row=3, column=2, padx=11, pady=6)

btn2=tk.Button(root4, text="Search", bd=1, command=enter)


btn2.grid(row=4, column=1, padx=3,pady=6, sticky=tk.W)

main_menu1 = tk.Button(root4, text="Main Menu", bd=1, command=lambda: main_menu(root4))


main_menu1.grid(row=4, column=1,padx=3 ,pady=5, sticky=tk.E)

global label9
label9=tk.Label(root4, text="There are 0 search results")
label9.grid(row=5, column=0, columnspan=3, padx=5,pady=6)

e=name_entry.get()
f=pn_entry.get()
h=country_entry.get()

table_frame = ttk.Frame(root4)
table_frame.grid(row=6, column=0, columnspan=3, pady=2, padx=17)

table_scroll = ttk.Scrollbar(table_frame)
table_scroll.pack(side="right", fill="y")

table2 = ttk.Treeview(table_frame, yscrollcommand=table_scroll.set)


table2.pack(fill="both")

table_scroll.configure(command=table2.yview)

table2["columns"] = ("Name", "Phone Number", "Alternate Phone Number", "Country")


table2.column("#0", width=0, stretch=tk.NO)
table2.column("Name", width=100, anchor=tk.W)
table2.column("Phone Number", width=100, anchor=tk.W)
table2.column("Alternate Phone Number", width=150, anchor=tk.W)
table2.column("Country", width=100, anchor=tk.W)

table2.heading("#0", text="", anchor=tk.W)


table2.heading("Name", text="Name", anchor=tk.CENTER)
table2.heading("Phone Number", text="Phone Number", anchor=tk.CENTER)
table2.heading("Alternate Phone Number", text="Alternate Phone Number", anchor=tk.CENTER)
table2.heading("Country", text="Country", anchor=tk.CENTER)

root4.mainloop()

except:
handling_error()

def select():
try:
selected_item1 = table2.selection()
if selected_item1:
btn10.grid(row=7, column=2, padx=5, pady=6)

else:
btn10.grid_forget()

except:
handling_error()

def delete():
try:
btn10.grid_forget()

file:///C:/Users/Amit/OneDrive/Desktop/.py/Telephone Directory CSV.py 5/14


9/10/23, 1:25 PM Telephone Directory CSV.py

selected_item = table2.focus()
if selected_item:
item_values = table2.item(selected_item)["values"]

name12 = item_values[0]
phone_number12 = item_values[1]
alternate_phone_number12 = item_values[2]
country12 = item_values[3]

for i in lines:
if i[0] == name12 and i[3]==country12 and i[1]==phone_number12:
lines.remove(i)

with open("data.csv", "w", newline="") as g:


rt=["Name", "Phone Number", "Alternate Phone Number", "Country"]
io=csv.writer(g, delimiter=",")
io.writerrow(rt)
for i in lines:

io.writerow(i)

selected_item1 = table2.selection()

if selected_item1:
table2.delete(selected_item1)

messagebox.showinfo("Information", "The selected entry has been successfully deleted")

except:
handling_error()

def data():
try:
with open("data.csv","r", newline="") as j:

l=[]

io=csv.reader(j, delimiter=",")
for i in io:
if i == []:
continue
elif i==["Name", "Phone Number", "Alternate Phone Number", "Country"]:
continue
else:
i[1]=int(i[1])
l.append(i)

return l
except:
handling_error()

def editor():
try:
root.withdraw()
global root5
root5 = tk.Tk()
root5.geometry("550x600")
root5.title("Editing data")

label5 = tk.Label(root5, text="What categories do you want to search?")


label5.grid(row=0, column=1, padx=5, pady=6)

label6 = tk.Label(root5, text="Name")


label6.grid(row=2, column=0, padx=11, pady=6)

label7 = tk.Label(root5, text="Phone Number")


label7.grid(row=2, column=1, padx=11, pady=6)

file:///C:/Users/Amit/OneDrive/Desktop/.py/Telephone Directory CSV.py 6/14


9/10/23, 1:25 PM Telephone Directory CSV.py

label8 = tk.Label(root5, text="Country")


label8.grid(row=2, column=2, padx=11, pady=6)

global name_entry1
name_entry1 = tk.Entry(root5)
name_entry1.grid(row=3, column=0, padx=11, pady=6)

global pn_entry1
pn_entry1 = tk.Entry(root5)
pn_entry1.grid(row=3, column=1, padx=11, pady=6)

global country_entry1
country_entry1 = tk.Entry(root5)
country_entry1.grid(row=3, column=2, padx=11, pady=6)

btn2=tk.Button(root5, text="Search", bd=1, command=enter1)


btn2.grid(row=4, column=1, padx=11,pady=6)

global labelI
labelI=tk.Label(root5, text="There are 0 search results")
labelI.grid(row=5, column=0, columnspan=3, padx=5,pady=6)

enl=tk.Label(root5, text="Name")
enl.grid(row=8, column=0, padx=11, pady=6)

global ename
ename=tk.Entry(root5)
ename.config(state="disabled")
ename.grid(row=8, column=1, padx=11, pady=6)

ephl=tk.Label(root5, text="Phone Number")


ephl.grid(row=9, column=0, padx=11, pady=6)

global eph
eph=tk.Entry(root5)
eph.config(state="disabled")
eph.grid(row=9, column=1, padx=11, pady=6)

eaphl=tk.Label(root5, text="Alternate Phone Number")


eaphl.grid(row=10, column=0, padx=11, pady=6)

global eaph
eaph=tk.Entry(root5)
eaph.config(state="disabled")
eaph.grid(row=10, column=1, padx=11, pady=6)

ecl=tk.Label(root5, text="Country")
ecl.grid(row=11, column=0, padx=11, pady=6)

global ecountry
ecountry=tk.Entry(root5)
ecountry.config(state="disabled")
ecountry.grid(row=11, column=1, padx=11, pady=6)

global table3

table_frame1 = ttk.Frame(root5)
table_frame1.grid(row=6, column=0, columnspan=3, pady=2, padx=17)

table_scroll1 = ttk.Scrollbar(table_frame1)
table_scroll1.pack(side="right", fill="y")

table3 = ttk.Treeview(table_frame1, yscrollcommand=table_scroll1.set)


table3.pack(fill="both")
table_scroll1.configure(command=table3.yview)

table3["columns"] = ("Name", "Phone Number", "Alternate Phone Number", "Country")


table3.column("#0", width=0, stretch=tk.NO)

file:///C:/Users/Amit/OneDrive/Desktop/.py/Telephone Directory CSV.py 7/14


9/10/23, 1:25 PM Telephone Directory CSV.py

table3.column("Name", width=100, anchor=tk.W)


table3.column("Phone Number", width=100, anchor=tk.W)
table3.column("Alternate Phone Number", width=150, anchor=tk.W)
table3.column("Country", width=100, anchor=tk.W)

table3.heading("#0", text="", anchor=tk.W)


table3.heading("Name", text="Name", anchor=tk.CENTER)
table3.heading("Phone Number", text="Phone Number", anchor=tk.CENTER)
table3.heading("Alternate Phone Number", text="Alternate Phone Number", anchor=tk.CENTER)
table3.heading("Country", text="Country", anchor=tk.CENTER)

nt=tk.Button(root5, text="Select", command=select1)


nt.grid(row=7, column=0)

global btn1
btn1=tk.Button(root5, text="Edit", command=edit)

main_menu1 = tk.Button(root5, text="Main Menu", bd=1, command=lambda: main_menu(root5))


main_menu1.grid(row=7, column=2,padx=5 ,pady=6, sticky=tk.E)
except:
handling_error()

def select1():
try:
selected_item = table3.selection()
if selected_item:
btn1.grid(row=7, column=2, padx=5, pady=6, sticky=tk.W)

else:
btn1.grid_forget()

except:
handling_error()

def edit():

entry_edit()
add_text()

def entry_edit():
try:
ename.config(state="normal")
eph.config(state="normal")
eaph.config(state="normal")
ecountry.config(state="normal")

global cancel_btn
cancel_btn=tk.Button(root5, text="Cancel",command=cancel)
cancel_btn.grid(row=10, column=2, rowspan=2,padx=3,pady=3)

global btn2
btn2=tk.Button(root5, text="Update", command=update)
btn2.grid(row=9, column=2, rowspan=2,padx=3,pady=3)

except:
handling_error()

def cancel():
try:
ename.delete(0,tk.END)
eph.delete(0,tk.END)
eaph.delete(0,tk.END)
ecountry.delete(0,tk.END)

ename.config(state="disabled")
eph.config(state="disabled")
eaph.config(state="disabled")
ecountry.config(state="disabled")

file:///C:/Users/Amit/OneDrive/Desktop/.py/Telephone Directory CSV.py 8/14


9/10/23, 1:25 PM Telephone Directory CSV.py

btn2.destroy()
cancel_btn.destroy()

except:
handling_error()

def update():
try:
btn1.grid_forget()

name12 = ename.get()
phone_number12 = int(eph.get())
alternate_phone_number12 = eaph.get()
country12 = ecountry.get()

y=[name12,phone_number12,alternate_phone_number12,country12]

selected_item = table3.focus()
if selected_item:
item_values = table3.item(selected_item)["values"]

global name1
name1 = item_values[0]

global phone_number1
phone_number1 = item_values[1]

global alternate_phone_number1
alternate_phone_number1 = item_values[2]

global country1
country1 = item_values[3]

with open("data.csv", "w", newline="") as f:


updated = False
rt=["Name", "Phone Number", "Alternate Phone Number", "Country"]
io=csv.writer(f, delimiter=",")
io.writerrow(rt)
for i in lines:
if i[0] == name1 and i[3] == country1 and i[1] == phone_number1:
io.writerow(y)
updated = True
else:
io.writerow(i)

enter1()

ename.delete(0,tk.END)
eph.delete(0,tk.END)
eaph.delete(0,tk.END)
ecountry.delete(0,tk.END)

ename.config(state="disabled")
eph.config(state="disabled")
eaph.config(state="disabled")
ecountry.config(state="disabled")

if updated:

messagebox.showinfo("Information", "The selected entry has been successfully updated")

except:
handling_error()

def add_text():
try:
selected_item = table3.focus()
if selected_item:

file:///C:/Users/Amit/OneDrive/Desktop/.py/Telephone Directory CSV.py 9/14


9/10/23, 1:25 PM Telephone Directory CSV.py

item_values = table3.item(selected_item)["values"]

global name1
name1 = item_values[0]

global phone_number1
phone_number1 = item_values[1]

global alternate_phone_number1
alternate_phone_number1 = item_values[2]

global country1
country1 = item_values[3]

ename.delete(0, tk.END)
ename.insert(0, name1)
eph.delete(0, tk.END)
eph.insert(0, phone_number1)
eaph.delete(0, tk.END)
eaph.insert(0, alternate_phone_number1)
ecountry.delete(0, tk.END)
ecountry.insert(0, country1)

except:
handling_error()

def enter1():
try:
global lines
lines=data()
if table3.get_children():
table3.delete(*table3.get_children())
p = name_entry1.get()
q = str(pn_entry1.get())
r = country_entry1.get()
count = 0
for i in lines:
if p != "" and q == "" and r == "":
if i[0] == p:
table3.insert(parent="", index="end", text="", values=i)
count += 1

elif q != "" and q == r:


if i[1] == int(q) or i[2] == int(q):
table3.insert(parent="", index="end", text="", values=i)
count += 1

elif r != "" and p == q:


if i[3] == r:
table3.insert(parent="", index="end", text="", values=i)
count += 1

elif p != "" and q != "" and r == "":


if i[0] == p and i[1] == int(q) or i[2] == int(q):
table3.insert(parent="", index="end", text="", values=i)
count += 1

elif p != "" and r != "" and q == "":


if i[0] == p and i[3] == r:
table3.insert(parent="", index="end", text="", values=i)
count += 1

elif q != "" and r != "" and p == "":


if i[3] == r and i[1] == int(q) or i[2] == int(q):
table3.insert(parent="", index="end", text="", values=i)
count += 1

elif p != "" and q != "" and r != "":


if i[3] == r and i[0] == p and i[1] == int(q) or i[2] == int(q):

file:///C:/Users/Amit/OneDrive/Desktop/.py/Telephone Directory CSV.py 10/14


9/10/23, 1:25 PM Telephone Directory CSV.py

table3.insert(parent="", index="end", text="", values=i)


count += 1
labelI.config(text="There are " + str(count) + " search results")

except:
handling_error()
def delete_win():
try:
global root4
global table2
global e
global f
global h
global name_entry
global pn_entry
global country_entry

root.withdraw()
root4 = tk.Tk()
root4.geometry("520x430")
root4.title("Deleting data")

label5 = tk.Label(root4, text="What categories do you want to search?")


label5.grid(row=0, column=1, padx=5, pady=6)

label6 = tk.Label(root4, text="Name")


label6.grid(row=2, column=0, padx=11, pady=6)

label7 = tk.Label(root4, text="Phone Number")


label7.grid(row=2, column=1, padx=11, pady=6)

label8 = tk.Label(root4, text="Country")


label8.grid(row=2, column=2, padx=11, pady=6)

name_entry= tk.Entry(root4)
name_entry.grid(row=3, column=0, padx=11, pady=6)

pn_entry = tk.Entry(root4)
pn_entry.grid(row=3, column=1, padx=11, pady=6)

country_entry = tk.Entry(root4)
country_entry.grid(row=3, column=2, padx=11, pady=6)

btn2=tk.Button(root4, text="Search", bd=1, command=enter)


btn2.grid(row=4, column=1, padx=3,pady=6, sticky=tk.W)

main_menu1 = tk.Button(root4, text="Main Menu", bd=1, command=lambda: main_menu(root4))


main_menu1.grid(row=4, column=1,padx=3 ,pady=5, sticky=tk.E)

global label9
label9=tk.Label(root4, text="There are 0 search results")
label9.grid(row=5, column=0, columnspan=3, padx=5,pady=6)

e=name_entry.get()
f=pn_entry.get()
h=country_entry.get()

table_frame = ttk.Frame(root4)
table_frame.grid(row=6, column=0, columnspan=3, pady=2, padx=17)

table_scroll = ttk.Scrollbar(table_frame)
table_scroll.pack(side="right", fill="y")

table2 = ttk.Treeview(table_frame, yscrollcommand=table_scroll.set)


table2.pack(fill="both")

table_scroll.configure(command=table2.yview)

table2["columns"] = ("Name", "Phone Number", "Alternate Phone Number", "Country")

file:///C:/Users/Amit/OneDrive/Desktop/.py/Telephone Directory CSV.py 11/14


9/10/23, 1:25 PM Telephone Directory CSV.py

table2.column("#0", width=0, stretch=tk.NO)


table2.column("Name", width=100, anchor=tk.W)
table2.column("Phone Number", width=100, anchor=tk.W)
table2.column("Alternate Phone Number", width=150, anchor=tk.W)
table2.column("Country", width=100, anchor=tk.W)

table2.heading("#0", text="", anchor=tk.W)


table2.heading("Name", text="Name", anchor=tk.CENTER)
table2.heading("Phone Number", text="Phone Number", anchor=tk.CENTER)
table2.heading("Alternate Phone Number", text="Alternate Phone Number", anchor=tk.CENTER)
table2.heading("Country", text="Country", anchor=tk.CENTER)

nt=tk.Button(root4, text="Select", command=select)


nt.grid(row=7, column=0)

global btn10
btn10=tk.Button(root4, text="Delete", command=delete)

root4.mainloop()

except:
handling_error()

def close():
try:
pass_window.deiconify()
pass_entry.delete(0, tk.END)
root.withdraw()
except:
handling_error()

def start():
try:
pass_window.withdraw()

global lines
lines = data()

global root
root = tk.Tk()
root.geometry("400x320")
root.title("Telephone Directory")

root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)

custom_font = font.Font(family="Times new roman", size=50, weight="bold")

klabel= tk.Label(root,text="TELEPHONE DIRECTORY",font=custom_font)


klabel.grid(row=0, column=0, columnspan=2,rowspan=2, padx=10, pady=3, sticky="nsew")

btn_width = 24

btnA = tk.Button(root, text="Write a new record", bd=1, command=writer, width=btn_width)


btnA.grid(row=2, column=0, padx=10, pady=3, sticky="w")

btnB = tk.Button(root, text="Search an existing record", bd=1, command=searcher,


width=btn_width)
btnB.grid(row=2, column=1, padx=10, pady=3, sticky="e")

btnC = tk.Button(root, text="Edit an existing record", bd=1, command=editor,


width=btn_width)
btnC.grid(row=3, column=0, padx=10, pady=3, sticky="w")

btnE = tk.Button(root, text="Log out", bd=1, command=close, width=btn_width)


btnE.grid(row=4, column=0,columnspan=2, padx=10, pady=3)

btnF = tk.Button(root, text="Delete an existing record", bd=1, command=delete_win,


width=btn_width)

file:///C:/Users/Amit/OneDrive/Desktop/.py/Telephone Directory CSV.py 12/14


9/10/23, 1:25 PM Telephone Directory CSV.py

btnF.grid(row=3, column=1, padx=10, pady=3, sticky="e")

root.mainloop()
except:
handling_error()

def toggle_password_visibility():
try:
if show_password.get():
pass_entry.config(show="")

else:
pass_entry.config(show="*")

except:
handling_error()

def submit1():
try:
password = pass_entry.get()
if password=="Bosco@5130":
start()

else:
pass_entry.config(bg="red")

except:
handling_error()

def show_error_dialog():
root.withdraw()

result = messagebox.showerror("Error", "An error occurred.")

return result

def handling_error():
ok=show_error_dialog()
result = messagebox.askquestion("Question", "Do you want to open log file?")
if result=="yes":
os.startfile("log.txt")

else:
os._exit(0)

if ok=="ok":
current_datetime = datetime.now()
timestamp=current_datetime.strftime("%Y-%m-%d %H:%M:%S")
error_message = traceback.format_exc()
with open("log.txt", "a") as f:
f.write(f"[{timestamp}]\n")
f.write(f"{error_message}\n")
f.write(f"______________________________________________________________\n")

def close_pass():
result = messagebox.askquestion("Question", "Are you sure?")
if result == "yes":
os._exit(0)

else:
pass

try:

pass_window = tk.Tk()
pass_window.geometry("500x500")
pass_window.title("Login")

image = Image.open("logo.jpeg")

file:///C:/Users/Amit/OneDrive/Desktop/.py/Telephone Directory CSV.py 13/14


9/10/23, 1:25 PM Telephone Directory CSV.py

tk_image = ImageTk.PhotoImage(image)

labelA = tk.Label(pass_window, image=tk_image)


labelA.grid(row=1, column=1, padx=10, pady=10, columnspan=1, rowspan=3, sticky="nsew")

labelB = tk.Label(pass_window, text="Password:")


labelB.grid(row=4, column=1, padx=10, pady=10, sticky="w")

pass_entry = tk.Entry(pass_window, show="*")


pass_entry.grid(row=4, column=1, padx=10, pady=0, sticky="e")

show_password = tk.BooleanVar()
show_password_checkbox = tk.Checkbutton(pass_window, text="Show Password",
variable=show_password, command=toggle_password_visibility)
show_password_checkbox.grid(row=5, column=1, padx=10, pady=10, sticky="w")

submit_button = tk.Button(pass_window, text="Login", command=submit1)


submit_button.grid(row=6, column=1, padx=10, pady=10, sticky="nsew")

exit_button = tk.Button(pass_window, text="Exit", command=close_pass)


exit_button.grid(row=6, column=1, padx=10, pady=10, sticky="e")

pass_window.grid_rowconfigure(0, weight=1)
pass_window.grid_rowconfigure(7, weight=1)
pass_window.grid_columnconfigure(0, weight=1)
pass_window.grid_columnconfigure(2, weight=1)

pass_window.mainloop()
except:
handling_error()

file:///C:/Users/Amit/OneDrive/Desktop/.py/Telephone Directory CSV.py 14/14

You might also like