Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import tkinter as tk
- from tkinter import messagebox
- import csv
- import operator
- LARGE_FONT= ("Verdana", 12)
- class main(tk.Tk):
- def __init__(self, *args, **kwargs):
- tk.Tk.__init__(self, *args, **kwargs)
- container = tk.Frame(self)
- container.pack(side="top", fill="both", expand = True)
- container.grid_rowconfigure(0, weight=1)
- container.grid_columnconfigure(0, weight=1)
- self.geometry("1500x600")
- self.frames = {}
- for F in (auth, menu, addStudent, getStudent, reports):
- frame = F(container, self)
- self.frames[F] = frame
- frame.grid(row=0, column=0, sticky="nsew")
- self.show_frame(menu)
- def show_frame(self, cont):
- frame = self.frames[cont]
- frame.tkraise()
- class auth(tk.Frame):
- failedLogins = 0
- def __init__(self, parent, controller):
- tk.Frame.__init__(self,parent)
- label = tk.Label(self, text="Auth", font=LARGE_FONT)
- label.pack(pady=10,padx=10)
- usernameEntry = tk.Entry(self)
- passwordEntry = tk.Entry(self, show="*")
- usernameLabel = tk.Label(self, text="Username").pack()
- usernameEntry.pack()
- pas1swordLabel = tk.Label(self, text="Password").pack()
- passwordEntry.pack()
- def login_btn_clicked():
- #print("Clicked")
- username = usernameEntry.get()
- password = passwordEntry.get()
- if username == "leeman" and password == "password":
- print("Done Auth")
- controller.show_frame(menu)
- elif self.failedLogins >= 3:
- messagebox.showerror("Login failed", "Too many incorrect login attempts")
- else:
- self.failedLogins+=1
- button = tk.Button(self, text="Login", command=login_btn_clicked)
- button.pack()
- class menu(tk.Frame):
- def __init__(self, parent, controller):
- tk.Frame.__init__(self, parent)
- label = tk.Label(self, text="Main menu", font=LARGE_FONT)
- label.pack(pady=10,padx=10)
- button1 = tk.Button(self, text="Add student", command=lambda: controller.show_frame(addStudent))
- button1.pack()
- button2 = tk.Button(self, text="Get student", command=lambda: controller.show_frame(getStudent))
- button2.pack()
- button3 = tk.Button(self, text="Get reports", command=lambda: controller.show_frame(reports))
- button3.pack()
- button4 = tk.Button(self, text="Log out", command=lambda: controller.show_frame(auth))
- button4.pack()
- class addStudent(tk.Frame):
- def __init__(self, parent, controller):
- tk.Frame.__init__(self, parent)
- label = tk.Label(self, text="Add student", font=LARGE_FONT)
- label.pack(pady=10,padx=10)
- button1 = tk.Button(self, text="Home",
- command=lambda: controller.show_frame(menu))
- button1.pack()
- def newID():
- with open('tutGroup.csv') as csvfile:
- allID = []
- spamreader = csv.reader(csvfile, delimiter=',', quotechar='|')
- for row in spamreader:
- allID.append(row)
- newID = (len(allID))+1119
- return newID
- def processStudent():
- forename = forenameEntry.get()
- surname = surnameEntry.get()
- dob = DOBEntry.get()
- address = addressEntry.get()
- phone = phoneEntry.get()
- gender = genderEntry.get()
- email = str(surname+"."+forename+"@treeschhol.com")
- with open('tutGroup.csv', 'a') as csvfile:
- writer=csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
- writer.writerow([newID(),surname,forename,dob,address,phone,gender,'L15',email])
- messagebox.showinfo("Student Added", "This student has been added to the tutor group")
- forenameEntry = tk.Entry(self)
- forenameLabel = tk.Label(self, text="Forename").pack()
- forenameEntry.pack()
- surnameEntry = tk.Entry(self)
- surnameLabel = tk.Label(self, text="Surename").pack()
- surnameEntry.pack()
- DOBEntry = tk.Entry(self)
- DOBLabel = tk.Label(self, text="Date of Birth (DD/MM/YYYY)").pack()
- DOBEntry.pack()
- addressEntry = tk.Entry(self)
- addressLabel = tk.Label(self, text="Home address").pack()
- addressEntry.pack()
- phoneEntry = tk.Entry(self)
- phoneLabel = tk.Label(self, text="Phone number").pack()
- phoneEntry.pack()
- genderEntry = tk.Entry(self)
- genderLabel = tk.Label(self, text="Gender").pack()
- genderEntry.pack()
- button2 = tk.Button(self, text="Submit", command=processStudent)
- button2.pack()
- class getStudent(tk.Frame):
- def __init__(self, parent, controller):
- tk.Frame.__init__(self, parent)
- label = tk.Label(self, text="Get student", font=LARGE_FONT)
- label.pack(pady=10,padx=10)
- button1 = tk.Button(self, text="Back to Home",
- command=lambda: controller.show_frame(menu))
- button1.pack()
- def showStudent():
- unqID = idEntry.get()
- allStud = []
- i = 0
- with open('tutGroup.csv', 'r') as csvfile:
- spamreader = csv.reader(csvfile, delimiter=',', quotechar='|')
- for row in spamreader:
- allStud.append(row)
- while i < len(allStud):
- ID = allStud[i][0]
- if ID == unqID:
- forename.set(allStud[i][2])
- surname.set(allStud[i][1])
- email.set(allStud[i][8])
- dob.set(allStud[i][3])
- address.set(allStud[i][4].replace('"', ''))
- phone.set(allStud[i][5])
- gender.set(allStud[i][6])
- i += 1
- idEntry = tk.Entry(self)
- idLabel = tk.Label(self, text="Student ID").pack()
- idEntry.pack()
- button2 = tk.Button(self, text="Submit", command=showStudent)
- button2.pack()
- forename = tk.StringVar()
- surname = tk.StringVar()
- email = tk.StringVar()
- dob = tk.StringVar()
- address = tk.StringVar()
- phone = tk.StringVar()
- gender = tk.StringVar()
- forenameEntry = tk.Entry(self, textvariable=forename)
- forenameLabel = tk.Label(self, text="Forename").pack()
- forenameEntry.pack()
- surnameEntry = tk.Entry(self, textvariable=surname)
- surnameLabel = tk.Label(self, text="Surename").pack()
- surnameEntry.pack()
- emailEntry = tk.Entry(self, textvariable=email)
- emailLabel = tk.Label(self, text="Email").pack()
- emailEntry.pack()
- DOBEntry = tk.Entry(self, textvariable=dob)
- DOBLabel = tk.Label(self, text="Date of Birth (DD/MM/YYYY)").pack()
- DOBEntry.pack()
- addressEntry = tk.Entry(self, textvariable=address)
- addressLabel = tk.Label(self, text="Home address").pack()
- addressEntry.pack()
- phoneEntry = tk.Entry(self, textvariable=phone)
- phoneLabel = tk.Label(self, text="Phone number").pack()
- phoneEntry.pack()
- genderEntry = tk.Entry(self, textvariable=gender)
- genderLabel = tk.Label(self, text="Gender").pack()
- genderEntry.pack()
- class reports(tk.Frame):
- def __init__(self, parent, controller):
- tk.Frame.__init__(self, parent)
- label = tk.Label(self, text="Reports", font=LARGE_FONT)
- label.pack(pady=10,padx=10)
- def set_text(text):
- results.delete("1.0", tk.END)
- for row in text:
- resultString = row['ID'],row['forename'],row['surname'].upper(),row['dob'],row['home address'],row['phone'],row['email'],row['gender'].upper()
- emptyString = "\n\n"
- results.insert("1.0", resultString)
- results.insert("1.0", emptyString)
- return
- def reportsID():
- with open('tutGroup.csv') as csvfile:
- spamreader = csv.DictReader(csvfile, delimiter=",")
- sortedlist = sorted(spamreader, key=lambda row:(row['ID']), reverse=True)
- set_text(sortedlist)
- def reportsGender():
- with open('tutGroup.csv') as csvfile:
- spamreader = csv.DictReader(csvfile, delimiter=",")
- sortedlist = sorted(spamreader, key=lambda row:(row['gender']), reverse=True)
- set_text(sortedlist)
- def reportsAlpha():
- with open('tutGroup.csv') as csvfile:
- spamreader = csv.DictReader(csvfile, delimiter=",")
- sortedlist = sorted(spamreader, key=lambda row:(row['surname']), reverse=True)
- set_text(sortedlist)
- button1 = tk.Button(self, text="Back to Home",
- command=lambda: controller.show_frame(menu))
- button1.pack()
- button2 = tk.Button(self, text="Sort students by ID", command=lambda: reportsID())
- button2.pack()
- button3 = tk.Button(self, text="Sort students by Gender", command=lambda: reportsGender())
- button3.pack()
- button4 = tk.Button(self, text="Sort students Alphabetically", command=lambda: reportsAlpha())
- button4.pack()
- results = tk.Text(self, width=1920, height=1080)
- results.pack()
- app = main()
- app.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement