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. (Not done yet)
• 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
• Validating Entry Widget (i.e., accepting valid input for each text box). For example, accept numbers only for Age, and mobile number and visa versa (i.e., doesnt accept number for name, gender, position)- Show message box for invalid input
Here is the code
import csv
from tkinter import *
from tkinter import messagebox
def load_data(path): # Load data from csv file at program start.
reader = csv.reader(open(path))
return list(reader)[1:]
window=Tk()
window.geometry("800x500+0+0")
window.title("Employee Management System")
window.maxsize(width=800,height=500)
window.minsize(width=800,height=500)
FILEPATH = '/Users/nhal-naffakh/Desktop/Desktop/Sec-Interview/Data.csv'
main_lst = load_data(FILEPATH) # Load csv data into `main_lst`
def view():
index = listbox1.curselection()[0]
NameLabel2.config(text=main_lst[index][0])
AgeLabel2.config(text=main_lst[index][1])
GenderLabel2.config(text=main_lst[index][2])
PositionLabel2.config(text=main_lst[index][3])
AddressLabel2.config(text=main_lst[index][4])
def OpenFile():
pass
def Add():
name = Nametxt.get() # get the name of new entry
lst = [name, Agetxt.get(), Gendertxt.get(), Positiontxt.get(), Numbertxt.get(), Addresstxt.get()]
main_lst.append(lst)
listbox1.insert(len(List_of_Name), name) # add it to the listbox list
List_of_Name.append(name) # store it in the list of names
messagebox.showinfo("Information","The data has been added successfully")
def Save():
with open(FILEPATH,"w") as file:
writer = csv.writer(file, lineterminator='\n')
writer.writerow(["Fullname","Age","Gender","Position","Phone Number","Address"])
writer.writerows(main_lst) # now when it writes to file it will contain all the data.
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 = messagebox.askyesno("Employee Management System", "Do you want to exit the system")
if wayOut > 0:
Save() # Added a call to save upon exiting.
window.destroy()
return
List_of_Name=[]
for x in list(range(0,len(main_lst))):
List_of_Name.append(main_lst[x][0])
var = StringVar(value=List_of_Name)
listbox1 = Listbox(window, listvariable=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)
NameLabel = Label(window,text="FullName").grid(row=5,column=0,sticky="w")
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="")
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")
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()
