Skip to content

Instantly share code, notes, and snippets.

@rsmahmud
Created October 28, 2018 03:09
Show Gist options
  • Save rsmahmud/dbc8244366c9537248e69d342d74acc8 to your computer and use it in GitHub Desktop.
Save rsmahmud/dbc8244366c9537248e69d342d74acc8 to your computer and use it in GitHub Desktop.
from tkinter import *
from tkinter import messagebox
#global constants are named in ALLCAP by convention
global USERID, PASSWD
global STUDENT_NAME, STUDENT_REGI, STUDENT_SPEC, STUDENT_MOBI, STUDENT_MAIL
global SUPERVISER_UID, SUPERVISER_PWD
global SUPERVISER_NAME, SUPERVISER_REGI, SUPERVISER_SPEC, SUPERVISER_MOBI, SUPERVISER_MAIL
def student_login():
u = USERID.get().strip() #ignore 'space'
p = PASSWD.get()
if not all([u,p]):messagebox.showerror("INFO", "Clicked on Login. Invalid Input.")
else:
messagebox.showinfo("INFO", "Data passed : {} : {}".format(u,p))
#do whatever u want with USERIDname and password
#clear input fields
USERID.set('')
PASSWD.set('')
def superviser_login():
u = SUPERVISER_UID.get().strip() #ignore 'space'
p = SUPERVISER_PWD.get()
if not all([u,p]):messagebox.showerror("INFO", "Clicked on Login. Invalid Input.")
else:
messagebox.showinfo("INFO", "Data passed : {} : {}".format(u,p))
#do whatever u want with USERIDname and password
#clear input fields
SUPERVISER_UID.set('')
SUPERVISER_PWD.set('')
def student_reg():
name = STUDENT_NAME.get().strip()
regi = STUDENT_REGI.get().strip()
spec = STUDENT_SPEC.get().strip()
mobi = STUDENT_MOBI.get().strip()
mail = STUDENT_MAIL.get().strip()
#validate input and write to db
if not all([name,regi,spec,mobi,mail]) :
messagebox.showerror("INFO", "Clicked on Register. Invalid Input.")
else:
messagebox.showinfo("INFO", "{} : {} : {} : {} : {}".format(name,regi,spec,mobi,mail))
#clear input fields
STUDENT_NAME.set('')
STUDENT_REGI.set('')
STUDENT_SPEC.set('')
STUDENT_MOBI.set('')
STUDENT_MAIL.set('')
def superviser_reg():
name = SUPERVISER_NAME.get().strip()
regi = SUPERVISER_REGI.get().strip()
spec = SUPERVISER_SPEC.get().strip()
mobi = SUPERVISER_MOBI.get().strip()
mail = SUPERVISER_MAIL.get().strip()
#validate input and write to db
if not all([name,regi,spec,mobi,mail]) :
messagebox.showerror("INFO", "Clicked on Register. Invalid Input.")
else:
messagebox.showinfo("INFO", "{} : {} : {} : {} : {}".format(name,regi,spec,mobi,mail))
#clear input fields
SUPERVISER_NAME.set('')
SUPERVISER_REGI.set('')
SUPERVISER_SPEC.set('')
SUPERVISER_MOBI.set('')
SUPERVISER_MAIL.set('')
class App(Tk):
def __init__(self, *args, **kwargs):
Tk.__init__(self, *args, **kwargs)
MainMenu(self)
container = Frame(self)
container.pack(fill=BOTH)
container.pack(side="top")
self.frames = {}
for F in [StartPage, LoginPage, NewUserPage, SuperviserPage, InfoPage, SuperviserLoginPage, SuperviserRegPage]:
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky=NSEW)
self.show_frame(StartPage)
def show_frame(self, context):
frame = self.frames[context]
frame.tkraise()
class StartPage(Frame):
def __init__(self, parent, controller):
Frame.__init__(self, parent)
top_nav = Frame(self, pady=30, bg="White")
Button(top_nav, text="Info", width=15, bg="#2673ef", fg="White", command=lambda:controller.show_frame(InfoPage)).pack(side=RIGHT)
Button(top_nav, text="Superviser", width=15, bg="#2673ef", fg="White", command=lambda:controller.show_frame(SuperviserPage)).pack(side=RIGHT)
Button(top_nav, text="New User", width=15, bg="#2673ef", fg="White", command=lambda:controller.show_frame(NewUserPage)).pack(side=RIGHT)
Button(top_nav, text="Login", width=15, bg="#2673ef", fg="White", command=lambda:controller.show_frame(LoginPage)).pack(side=RIGHT)
top_nav.pack(side=TOP)
Label(self, text="Start Page", height=3,bg="#2673ef", fg="White").pack(side=TOP,fill=X)
class LoginPage(Frame):
def __init__(self, parent, controller):
Frame.__init__(self, parent)
global USERID, PASSWD
top_nav = Frame(self,pady=30, bg="White")
Button(top_nav, text="Info", width=15, bg="#2673ef", fg="White", command=lambda:controller.show_frame(InfoPage)).pack(side=RIGHT)
Button(top_nav, text="Superviser", width=15, bg="#2673ef", fg="White",command=lambda:controller.show_frame(SuperviserPage)).pack(side=RIGHT)
Button(top_nav, text="New User", width=15, bg="#2673ef", fg="White", command=lambda:controller.show_frame(NewUserPage)).pack(side=RIGHT)
Button(top_nav, text="Login", width=15, command=lambda:controller.show_frame(StartPage)).pack(side=RIGHT)
top_nav.pack(side=TOP)
Label(self, text="Student Login", height=3, bg="#2673ef", fg="White").pack(side=TOP,fill=X)
row1 = Frame(self)
USERID = StringVar()
Label(row1, text="Username", width=15).pack(side=LEFT)
Entry(row1, textvariable=USERID, width=22).pack(side=LEFT)
Label(row1, text="", width=15).pack(side=LEFT)
row1.pack(expand=YES)
row2 = Frame(self)
PASSWD = StringVar()
Label(row2, text="Password", width=15).pack(side=LEFT)
Entry(row2, textvariable=PASSWD, width=22,show="*").pack(side=LEFT)
Label(row2, text="", width=15).pack(side=LEFT)
row2.pack(expand=YES)
row3 = Frame(self)
Label(row3, text="", width=23).pack(side=LEFT)
Button(row3, text="Login", width=20, bg="#2673ef", fg="White", command=student_login).pack(side=LEFT, expand=YES)
Button(row3, text="Register", width=20, bg="#2673ef", fg="White", command=lambda:controller.show_frame(NewUserPage)).pack(side=LEFT, expand=YES)
row3.pack(expand=YES)
class SuperviserLoginPage(Frame):
def __init__(self, parent, controller):
Frame.__init__(self, parent)
global SUPERVISER_UID, SUPERVISER_PWD
top_nav = Frame(self,pady=30, bg="White")
Button(top_nav, text="Info", width=15, bg="#2673ef", fg="White", command=lambda:controller.show_frame(InfoPage)).pack(side=RIGHT)
Button(top_nav, text="Superviser", width=15, bg="#2673ef", fg="White",command=lambda:controller.show_frame(SuperviserPage)).pack(side=RIGHT)
Button(top_nav, text="New User", width=15, bg="#2673ef", fg="White", command=lambda:controller.show_frame(NewUserPage)).pack(side=RIGHT)
Button(top_nav, text="Login", width=15,bg="#2673ef", fg="White", command=lambda:controller.show_frame(LoginPage)).pack(side=RIGHT)
top_nav.pack(side=TOP)
Label(self, text="Superviser Login", height=3, bg="#2673ef", fg="White").pack(side=TOP,fill=X)
row1 = Frame(self)
SUPERVISER_UID = StringVar()
Label(row1, text="UID", width=15).pack(side=LEFT)
Entry(row1, textvariable=SUPERVISER_UID, width=22).pack(side=LEFT)
Label(row1, text="", width=15).pack(side=LEFT)
row1.pack(expand=YES)
row2 = Frame(self)
SUPERVISER_PWD = StringVar()
Label(row2, text="Password", width=15).pack(side=LEFT)
Entry(row2, textvariable=SUPERVISER_PWD, width=22,show="*").pack(side=LEFT)
Label(row2, text="", width=15).pack(side=LEFT)
row2.pack(expand=YES)
row3 = Frame(self)
Label(row3, text="", width=23).pack(side=LEFT)
Button(row3, text="Login", width=20, bg="#2673ef", fg="White", command=superviser_login).pack(side=LEFT, expand=YES)
Button(row3, text="Register", width=20, bg="#2673ef", fg="White", command=lambda:controller.show_frame(SuperviserRegPage)).pack(side=LEFT, expand=YES)
row3.pack(expand=YES)
class SuperviserRegPage(Frame):
def __init__(self, parent, controller):
Frame.__init__(self, parent)
global SUPERVISER_NAME, SUPERVISER_REGI, SUPERVISER_SPEC, SUPERVISER_MOBI, SUPERVISER_MAIL
top_nav = Frame(self,pady=30, bg="White")
Button(top_nav, text="Info", width=15, bg="#2673ef", fg="White", command=lambda:controller.show_frame(InfoPage)).pack(side=RIGHT)
Button(top_nav, text="Superviser", width=15, bg="#2673ef", fg="White",command=lambda:controller.show_frame(SuperviserPage)).pack(side=RIGHT)
Button(top_nav, text="New User", width=15,bg="#2673ef", fg="White", command=lambda:controller.show_frame(NewUserPage)).pack(side=RIGHT)
Button(top_nav, text="Login", width=15,bg="#2673ef", fg="White", command=lambda:controller.show_frame(LoginPage)).pack(side=RIGHT)
top_nav.pack(side=TOP)
label = Label(self, text="Superviser Registration", height=3,bg="#2673ef", fg="White").pack(side=TOP,fill=X)
row1 = Frame(self)
SUPERVISER_NAME = StringVar()
Label(row1, text="Name", width=15).pack(side=LEFT)
Entry(row1, textvariable=SUPERVISER_NAME, width=22).pack(side=LEFT)
row1.pack()
row2 = Frame(self)
SUPERVISER_REGI = StringVar()
Label(row2, text="UID", width=15).pack(side=LEFT)
Entry(row2, textvariable=SUPERVISER_REGI, width=22).pack(side=LEFT)
row2.pack()
row3 = Frame(self)
SUPERVISER_SPEC = StringVar()
Label(row3, text="Specialization", width=15).pack(side=LEFT)
Entry(row3, textvariable=SUPERVISER_SPEC, width=22).pack(side=LEFT)
row3.pack()
row4 = Frame(self)
SUPERVISER_MOBI = StringVar()
Label(row4, text="Mobile No", width=15).pack(side=LEFT)
Entry(row4, textvariable=SUPERVISER_MOBI, width=22).pack(side=LEFT)
row4.pack()
row5 = Frame(self)
SUPERVISER_MAIL = StringVar()
Label(row5, text="Email", width=15).pack(side=LEFT)
Entry(row5, textvariable=SUPERVISER_MAIL, width=22).pack(side=LEFT)
row5.pack()
row6 = Frame(self)
Label(row6, text="", width=15).pack(side=LEFT)
Button(row6, text="Register", width=20, bg="#2673ef", fg="White", command=superviser_reg).pack()
row6.pack()
class NewUserPage(Frame):
def __init__(self, parent, controller):
Frame.__init__(self, parent)
global STUDENT_NAME, STUDENT_REGI, STUDENT_SPEC, STUDENT_MOBI, STUDENT_MAIL
top_nav = Frame(self,pady=30, bg="White")
Button(top_nav, text="Info", width=15, bg="#2673ef", fg="White", command=lambda:controller.show_frame(InfoPage)).pack(side=RIGHT)
Button(top_nav, text="Superviser", width=15, bg="#2673ef", fg="White",command=lambda:controller.show_frame(SuperviserPage)).pack(side=RIGHT)
Button(top_nav, text="New User", width=15, command=lambda:controller.show_frame(StartPage)).pack(side=RIGHT)
Button(top_nav, text="Login", width=15,bg="#2673ef", fg="White", command=lambda:controller.show_frame(LoginPage)).pack(side=RIGHT)
top_nav.pack(side=TOP)
label = Label(self, text="Student Registration", height=3,bg="#2673ef", fg="White").pack(side=TOP,fill=X)
row1 = Frame(self)
STUDENT_NAME = StringVar()
Label(row1, text="Name", width=15).pack(side=LEFT)
Entry(row1, textvariable=STUDENT_NAME, width=22).pack(side=LEFT)
row1.pack()
row2 = Frame(self)
STUDENT_REGI = StringVar()
Label(row2, text="Reg. No", width=15).pack(side=LEFT)
Entry(row2, textvariable=STUDENT_REGI, width=22).pack(side=LEFT)
row2.pack()
row3 = Frame(self)
STUDENT_SPEC = StringVar()
Label(row3, text="Specialization", width=15).pack(side=LEFT)
Entry(row3, textvariable=STUDENT_SPEC, width=22).pack(side=LEFT)
row3.pack()
row4 = Frame(self)
STUDENT_MOBI = StringVar()
Label(row4, text="Mobile No", width=15).pack(side=LEFT)
Entry(row4, textvariable=STUDENT_MOBI, width=22).pack(side=LEFT)
row4.pack()
row5 = Frame(self)
STUDENT_MAIL = StringVar()
Label(row5, text="Email", width=15).pack(side=LEFT)
Entry(row5, textvariable=STUDENT_MAIL, width=22).pack(side=LEFT)
row5.pack()
row6 = Frame(self)
Label(row6, text="", width=15).pack(side=LEFT)
Button(row6, text="Register", width=20, bg="#2673ef", fg="White", command=student_reg).pack()
row6.pack()
class SuperviserPage(Frame):
def __init__(self, parent, controller):
Frame.__init__(self, parent)
top_nav = Frame(self,pady=30, bg="White")
Button(top_nav, text="Info", width=15, bg="#2673ef", fg="White", command=lambda:controller.show_frame(InfoPage)).pack(side=RIGHT)
Button(top_nav, text="Superviser", width=15,command=lambda:controller.show_frame(StartPage)).pack(side=RIGHT)
Button(top_nav, text="New User", width=15,bg="#2673ef", fg="White", command=lambda:controller.show_frame(NewUserPage)).pack(side=RIGHT)
Button(top_nav, text="Login", width=15,bg="#2673ef", fg="White", command=lambda:controller.show_frame(LoginPage)).pack(side=RIGHT)
top_nav.pack(side=TOP)
Label(self, text="Superviser Area", height=3, bg="#2673ef", fg="White").pack(side=TOP,fill=X)
row7 = Frame(self)
Button(row7, text="Login", width=20, bg="#2673ef", fg="White",command=lambda:controller.show_frame(SuperviserLoginPage)).pack(side=LEFT, padx=20,pady=10)
Button(row7, text="New User", width=20, bg="#2673ef", fg="White",command=lambda:controller.show_frame(SuperviserRegPage)).pack(side=LEFT, padx=20,pady=10)
row7.pack()
row8 = Frame(self)
Button(row8, text="Open Hours", width=20, bg="#2673ef", fg="White",command=lambda:controller.show_frame(InfoPage)).pack(side=LEFT, padx=20,pady=10)
Button(row8, text="Select Students", width=20, bg="#2673ef", fg="White").pack(side=LEFT, padx=20,pady=10)
row8.pack()
class InfoPage(Frame):
def __init__(self, parent, controller):
Frame.__init__(self, parent)
top_nav = Frame(self,pady=30, bg="White")
Button(top_nav, text="Info", width=15, command=lambda:controller.show_frame(StartPage)).pack(side=RIGHT)
Button(top_nav, text="Superviser", width=15,bg="#2673ef", fg="White",command=lambda:controller.show_frame(SuperviserPage)).pack(side=RIGHT)
Button(top_nav, text="New User", width=15,bg="#2673ef", fg="White", command=lambda:controller.show_frame(NewUserPage)).pack(side=RIGHT)
Button(top_nav, text="Login", width=15,bg="#2673ef", fg="White", command=lambda:controller.show_frame(LoginPage)).pack(side=RIGHT)
top_nav.pack(side=TOP)
Label(self, text="Information : Open Hours", height=3, bg="#2673ef", fg="White").pack(side=TOP,fill=X)
class MainMenu:
def __init__(self, master):
menubar = Menu(master)
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label="Exit", command=master.quit)
menubar.add_cascade(label="File", menu=filemenu)
master.config(menu=menubar)
app = App()
app.title("Superviser Allocation Portal")
# root.geometry() will return '1x1+0+0' here
app.update()
# now app.geometry() returns valid size/placement
app.minsize(app.winfo_width(), 400)
app.mainloop()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment