-
Notifications
You must be signed in to change notification settings - Fork 0
/
gui.py
130 lines (109 loc) · 4.4 KB
/
gui.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
from gradespeedscraper.wrapper import Wrapper, Link
from gradespeedscraper.tkgui_utils import center_gui
from Tkinter import Tk, StringVar, BooleanVar, Frame, Label, LabelFrame, Button, Checkbutton, Entry
#from ttk import Label, Frame, Checkbutton, Button, LabelFrame, Entry
from config import main_url
import os
from base64 import encodestring, decodestring
wrap = Wrapper(main_url)
def login_gui(username, password):
def get_login(evt=None):
temp_username = username_holder.get()
temp_password = password_holder.get()
if remember_login_holder.get():
logon_file = open("dep.dat", "w")
logon_file.write(encodestring(temp_username+" "+temp_password))
logon_file.close()
elif os.path.isfile("dep.dat"):
os.remove("dep.dat")
login_tk.destroy()
wrap.login(temp_username, temp_password)
overview_gui()
return
def on_checkbox_flip():
if remember_login_holder.get():
logon_file = open("dep.dat", "w")
logon_file.write(encodestring(username_holder.get()+" "+password_holder.get()))
logon_file.close()
else:
if os.path.isfile("dep.dat"):
os.remove("dep.dat")
return
login_tk = Tk()
login_tk.title("Login Window")
Label(login_tk, text="Login to GradeSpeed").pack(padx=50, pady=(10, 5))
Label(login_tk, text="Username:").pack(padx=50, pady=(5, 0))
username_holder = StringVar()
username_holder.set(username)
username_field = Entry(login_tk, textvariable=username_holder)
username_field.pack(padx=50, pady=(0, 5))
username_field.bind("<Key-Return>", get_login)
Label(login_tk, text="Password:").pack(padx=50, pady=(5, 0))
password_holder = StringVar()
password_holder.set(password)
password_field = Entry(login_tk, textvariable=password_holder, show="*")
password_field.pack(padx=50, pady=(0, 5))
password_field.bind("<Key-Return>", get_login)
remember_login_holder = BooleanVar()
remember_login_holder.set(len(username) > 0)
login_frame = Frame(login_tk)
Checkbutton(login_frame, text="Remember Logon", var=remember_login_holder, command=on_checkbox_flip).pack()
login_frame.pack(pady=5)
Button(text="Login", command=get_login).pack(padx=50, pady=(5, 10))
center_gui(login_tk)
login_tk.mainloop()
def specific_frame(gui, link):
# TODO: Handle resizing if there is too much information displayed.
res = wrap.get_class_grades(link)
main_frame = LabelFrame(gui, text=res["class_name"] + " - " + res["current_average"])
for sec in res["sections"]:
frame_name = sec["name"]
if sec["average"]:
frame_name += " - " + sec["average"]
temp_frame = LabelFrame(main_frame, text=frame_name, padx=20, pady=5)
for i, h in enumerate(sec["grades"]["headers"]):
Label(temp_frame, text=h).grid(row=1, column=i)
for i, r in enumerate(sec["grades"]["rows"]):
for j, c in enumerate(r):
Label(temp_frame, text=c).grid(row=i+2, column=j)
temp_frame.pack(padx=20, pady=5)
main_frame.pack(padx=10, pady=(0, 10))
def specific_gui(link):
gui = Tk()
overview_frame(gui)
specific_frame(gui, link)
center_gui(gui)
gui.mainloop()
def overview_frame(gui):
def click_link(link):
gui.destroy()
specific_gui(link)
res = wrap.get_student_grades_overview()
frame = LabelFrame(gui, text=res["student_name"], padx=20, pady=10)
for i, t in enumerate(res["grades"]["headers"]):
Label(frame, text=str(t)).grid(row=0, column=i)
for i, r in enumerate(res["grades"]["rows"]):
for j, c in enumerate(r):
if isinstance(c, Link):
Button(frame, command=lambda l=c: click_link(l), text=str(c))\
.grid(row=i+1, column=j)
elif c:
Label(frame, text=str(c)).grid(row=i+1, column=j)
frame.pack(padx=10, pady=10)
gui.title(res["student_name"])
def overview_gui():
gui = Tk()
overview_frame(gui)
center_gui(gui)
gui.mainloop()
def get_file_tuple():
if os.path.isfile("dep.dat"):
logon_file = open("dep.dat")
temp = decodestring(logon_file.read())
logon_file.close()
return str(temp).split(" ")[0], str(temp).split(" ")[1]
return "", ""
def main():
login_gui(*(get_file_tuple()))
if __name__ == "__main__":
main()