I am new to Python and would like to implement a simple Employee Management System (as shown on the attached photo) that do the following functionality
• A GUI for entering, viewing, and exporting employee data. (Already completed)
• The ability to export data into an Excel or csv file. (Already completed but having an issue-Explained bellow)
• The ability to import all data from an Excel or csv file into the GUI.
Here is an example of the GUI
And Here is the CSV File
Fullname Age Gender Position Phone Number Address
Ali Talib 59 Male Vice-Chancellor 1752555555 UK-London
Afaf Neamah 23 Female Manager 7912394404 UK-Plymouth
Hussein Neamah 22 Male Head of Department 7335952523 UK-London
Estabraq Aldalboos 33 Female Engineer 7575252324 UK-Plymouth
Nathan Clarke 45 Male Deputy Head of School 7916682090 UK-London
Neamah AL-Naffakh 37 Male Lecturer 7817792202 UK-Plymouth
I need to develop the code to do the following
• I am currently having a problem. After each implementation, the code overwrite on the CSV file. For example, let suppose I have 10 records on the CSV file. Once I close or exit from Python, and run the system again, it would store the most recent record and delete all the old records (overwrite the new input with the old date)
• I need a better way to import all data from CSV and place it in list or text box (or any suggestion is highly appreciated.
Here is the code
import csv
from csv import *
from tkinter import *
from tkinter import filedialog
import tkinter.messagebox
window=Tk() #1-1
window.geometry("800x500+0+0") #1-2
window.title("Employee Management System")
window.maxsize(width=800,height=500)
window.minsize(width=800,height=500)
main_lst=[]
# add the column value into the list
FilePath = '/Users/nhal-naffakh/Desktop/Desktop/Sec-Interview/Data.csv'
# Create file object that open the file located in FilePath and store the file info in the object
File=open(FilePath)
# Create Object that read the csv file
# Convert each row in the CSV file into list of string and store it in Object
Reader=csv.reader(File)
Data=list(Reader)
del(Data[0]) #1-5 Delete title of the first row in the CSV
#print(Data[5][1])
# Create set of Functions
def view(): #1-8
index=listbox1.curselection()[0]
NameLabel2.config(text=Data[index][0])
AgeLabel2.config(text=Data[index][1])
GenderLabel2.config(text=Data[index][2])
PositionLabel2.config(text=Data[index][3])
AddressLabel2.config(text=Data[index][4])
return None
def OpenFile():
filepath=filedialog.askopenfilename()
# print(filepath)
# OR
file=open(filepath,'r')
print(file.read())
file.close
def Add():
lst=[Nametxt.get(),Agetxt.get(),Gendertxt.get(),Positiontxt.get(),Numbertxt.get(),Addresstxt.get()]
main_lst.append(lst)
messagebox.showinfo("Information","The data has been added successfully")
def Save():
with open("Data.csv","w") as file:
Writer=writer(file)
Writer.writerow(["Fullname","Age","Gender","Position","Phone Number","Address"])
Writer.writerows(main_lst)
messagebox.showinfo("Information","Saved succesfully")
def Clear():
Nametxt.delete(0,END)
Agetxt.delete(0,END)
Gendertxt.delete(0,END)
Positiontxt.delete(0,END)
Numbertxt.delete(0,END)
Addresstxt.delete(0,END)
def Exit():
wayOut = tkinter.messagebox.askyesno("Employee Management System", "Do you want to exit the system")
if wayOut > 0:
window.destroy()
return
# extract entire column into List to show it on GUI later
List_of_Name=[]
for x in list(range(0,len(Data))):
#print(Data[x][0])
List_of_Name.append(Data[x][0])
var=StringVar(value=List_of_Name) #1-3
listbox1=Listbox(window,listvariable=var) #1-4 Modified by adding var
listbox1.grid(row=3,column=0)
buttonView=Button(text="ViewRecord",padx=10, pady=4, bd=4, font=('ariel',12,'bold'),
width=8,fg='black',bg="dark gray",command=view).grid(row=3,column=1) #1-7
# Label Widget
NameLabel=Label(window,text="FullName").grid(row=5,column=0,sticky="w") #1-9
AgeLabel=Label(window,text="Age").grid(row=6,column=0,sticky="w")
GenderLabel=Label(window,text="Gender").grid(row=7,column=0,sticky="w")
PositionLabel=Label(window,text="Position").grid(row=8,column=0,sticky="w")
AddressLabel=Label(window,text="Address").grid(row=9,column=0,sticky="w")
NameLabel2=Label(window,text="") #1-10
NameLabel2.grid(row=5,column=1,sticky="w")
AgeLabel2=Label(window,text="")
AgeLabel2.grid(row=6,column=1,sticky="w")
GenderLabel2=Label(window,text="")
GenderLabel2.grid(row=7,column=1,sticky="w")
PositionLabel2=Label(window,text="")
PositionLabel2.grid(row=8,column=1,sticky="w")
AddressLabel2=Label(window,text="")
AddressLabel2.grid(row=9,column=1,sticky="w")
# Label Widget & Entry Widget #1-10
Namelabel3=Label(window,text="Full Name",font=('arial',12,'bold'),bd=3,fg="white",
bg="dark blue",).grid(row=0,column=0,sticky="w")
Nametxt=Entry(window,font=('ariel',12),bd=4,width=22, justify='left')
Nametxt.grid(row=0,column=1)
Agelabel3=Label(window,text="Age",font=("ariel",12,'bold'),bd=3,fg='white',
bg="dark blue",).grid(row=0,column=2)
Agetxt=Entry(window,font=('ariel',12),bd=4, justify='left')
Agetxt.grid(row=0,column=3)
GenderLabel3=Label(window,text="Gender",font=('ariel',12,'bold'),bd=3,fg='white',
bg="dark blue").grid(row=1,column=0,sticky="w")
Gendertxt=Entry(window,font=('ariel',12),bd=4, justify='left')
Gendertxt.grid(row=1,column=1)
PositionLabel3=Label(window,text="Position",font=('ariel',12,'bold'),bd=3,fg='white',
bg="dark blue").grid(row=1,column=2,sticky="w")
Positiontxt=Entry(window,font=('ariel',12),bd=4, justify='left')
Positiontxt.grid(row=1,column=3)
NumberLabel3=Label(window,text="Mob Number",font=('ariel',12,'bold'),bd=3,fg='white',
bg="dark blue").grid(row=2,column=0,sticky="w")
Numbertxt=Entry(window,font=('ariel',12),bd=4, justify='left')
Numbertxt.grid(row=2,column=1)
AddressLabel3=Label(window,text="Address",font=('ariel',12,'bold'),bd=3,fg='white',
bg="dark blue").grid(row=2,column=2,sticky="w")
Addresstxt=Entry(window,font=('ariel',12),bd=4, justify='left')
Addresstxt.grid(row=2,column=3)
# Button
LoadButton=Button(text="Load File", padx=10, pady=4, bd=4, font=('ariel',12,'bold'),
width=8,fg='black',bg="dark gray", command=OpenFile).grid(row=3,column=2)
AddButton=Button(text="Add Record", padx=10, pady=4, bd=4, font=('ariel',12,'bold'),
width=8,fg='black',bg="dark gray",command=Add).grid(row=3,column=3)
SaveButton=Button(text="Save", padx=10, pady=4, bd=4, font=('ariel',12,'bold'),
width=8,fg='black',bg="dark gray",command=Save).grid(row=4,column=1)
ClearButton=Button(text="Clear", padx=10, pady=4, bd=4, font=('ariel',12,'bold'),
width=8,fg='black',bg="dark gray",command=Clear).grid(row=4,column=2)
ExitButton=Button(text="Exit", padx=10, pady=4, bd=4, font=('ariel',12,'bold'),
width=8,fg='black', bg="dark gray",command=Exit).grid(row=4,column=3)
window.mainloop()
