/teacherInterface.py

https://bitbucket.org/icbmike/se206finalproject · Python · 170 lines · 141 code · 21 blank · 8 comment · 6 complexity · 0a219b561d02f26c5dbdfb2d356ff454 MD5 · raw file

  1. #!/usr/bin/env python
  2. from Tkinter import Tk, Frame, Label, SUNKEN, W, LEFT, Entry, Message, Button
  3. from Views import ListView, CreateView, StudentView
  4. from Utils import SpellingDatabase
  5. from functools import partial
  6. import tkFont, hashlib
  7. def main():
  8. def switch_frame(frameNumber, event):
  9. if frameNumber == 1:
  10. viewlists.pack_forget()
  11. viewcreate.pack()
  12. viewstudents.pack_forget()
  13. lNavViewLists.configure(bg="white", fg="black")
  14. lNavCreateLists.configure(bg="#DDDDDD", fg="#8800AA")
  15. lNavStudentRecords.configure(bg="white", fg="black")
  16. viewcreate.update_category()
  17. elif frameNumber == 2:
  18. viewcreate.pack_forget()
  19. viewlists.pack()
  20. viewstudents.pack_forget()
  21. lNavCreateLists.configure(bg="white", fg="black")
  22. lNavViewLists.configure(bg="#DDDDDD", fg="#8800AA")
  23. lNavStudentRecords.configure(bg="white", fg="black")
  24. viewlists.update()
  25. else:
  26. viewcreate.pack_forget()
  27. viewlists.pack_forget()
  28. viewstudents.pack()
  29. lNavCreateLists.configure(bg="white", fg="black")
  30. lNavViewLists.configure(bg="white", fg="black")
  31. lNavStudentRecords.configure(bg="#DDDDDD", fg="#8800AA")
  32. def login():
  33. def submit(event=None):
  34. password = hashlib.sha1(ePassword.get()).hexdigest()
  35. teacher_result = db.login('admin', password)
  36. if teacher_result == None:
  37. bSubmit.pack_forget()
  38. mError.pack()
  39. bSubmit.pack()
  40. else:
  41. login_root.destroy()
  42. db = SpellingDatabase()
  43. login_root = Tk()
  44. login_root.title("Spelling Aid")
  45. login_root.protocol("WM_DELETE_WINDOW", lambda: exit())
  46. fContainer = Frame(login_root)
  47. mMessage = Message(text="Enter the password to do admin actions", width=180)
  48. lPassword = Label(fContainer,text="Password:")
  49. ePassword = Entry(fContainer, show="*")
  50. ePassword.focus_force()
  51. mError = Message(fContainer, text="The details you entered were incorrect. Try Again", fg="red",width=200)
  52. bSubmit = Button(fContainer, text="Submit", command=submit)
  53. login_root.bind("<Return>", submit)
  54. mMessage.pack()
  55. lPassword.pack()
  56. ePassword.pack()
  57. bSubmit.pack(pady=5)
  58. fContainer.pack(pady=20, padx=20)
  59. login_root.mainloop()
  60. login()
  61. root = Tk()
  62. root.geometry('1004x610')
  63. border_width = 1
  64. border_style = SUNKEN
  65. background_colour = "#FFFFFF"
  66. default_height=600
  67. nav_frame = Frame(height=default_height,
  68. width=200,
  69. bd=border_width,
  70. relief=border_style,
  71. bg=background_colour)
  72. content_frame = Frame(height=default_height,
  73. width=804,
  74. bd=border_width,
  75. relief=border_style)
  76. nav_frame.grid(column=0, row=0)
  77. content_frame.grid(column=1, row=0)
  78. nav_frame.grid_propagate(0)
  79. content_frame.pack_propagate(0)
  80. #Create fonts for navLabels
  81. fontMouseOver = tkFont.Font(family="Helvetica", size=14, underline=True)
  82. fontMouseOut = tkFont.Font(family="Helvetica", size=14, underline=False)
  83. #Creating Navigation Labels
  84. lNavStudentRecords = Label(nav_frame,
  85. text="Student Records",
  86. bg="white",
  87. font=fontMouseOut,
  88. bd=border_width,
  89. relief=border_style,
  90. width=20)
  91. lNavViewLists = Label(nav_frame,
  92. text="View Word Lists",
  93. bg="white",
  94. font=fontMouseOut,
  95. bd=border_width,
  96. relief=border_style,
  97. width=20)
  98. lNavCreateLists = Label(nav_frame,
  99. text="Create Word Lists",
  100. bg="white",
  101. font=fontMouseOut,
  102. bd=border_width,
  103. relief=border_style,
  104. width=20)
  105. lNavLogout = Label(nav_frame,
  106. text="Logout",
  107. bg="white",
  108. font=fontMouseOut,
  109. bd=border_width,
  110. relief=border_style,
  111. width=20)
  112. #Binding Mouse events to the Labels
  113. #Mouse Clicks
  114. lNavViewLists.bind("<Button-1>", partial(switch_frame, 2))
  115. lNavCreateLists.bind("<Button-1>", partial(switch_frame, 1))
  116. lNavStudentRecords.bind("<Button-1>", partial(switch_frame, 3))
  117. lNavLogout.bind("<Button-1>", lambda(event): exit())
  118. #Mouse Movements
  119. lNavViewLists.bind("<Enter>", lambda(event):
  120. lNavViewLists.configure(font=fontMouseOver))
  121. lNavCreateLists.bind("<Enter>", lambda(event):
  122. lNavCreateLists.configure(font=fontMouseOver))
  123. lNavViewLists.bind("<Leave>", lambda(event):
  124. lNavViewLists.configure(font=fontMouseOut))
  125. lNavCreateLists.bind("<Leave>", lambda(event):
  126. lNavCreateLists.configure(font=fontMouseOut))
  127. lNavStudentRecords.bind("<Enter>", lambda(event):
  128. lNavStudentRecords.configure(font=fontMouseOver))
  129. lNavStudentRecords.bind("<Leave>", lambda(event):
  130. lNavStudentRecords.configure(font=fontMouseOut))
  131. lNavLogout.bind("<Enter>", lambda(event):
  132. lNavLogout.configure(font=fontMouseOver))
  133. lNavLogout.bind("<Leave>", lambda(event):
  134. lNavLogout.configure(font=fontMouseOut))
  135. #Gridding the labels
  136. lNavStudentRecords.grid(column=0, row=0)
  137. lNavViewLists.grid(column=0,row=1)
  138. lNavCreateLists.grid(column=0, row=2)
  139. lNavLogout.grid(column=0, row=3)
  140. #Creating the two views we have so far
  141. viewcreate = CreateView(content_frame, default_height, 800, border_style,
  142. border_width, background_colour)
  143. viewlists = ListView(content_frame, default_height, 800, border_style,
  144. border_width, background_colour)
  145. viewstudents = StudentView(content_frame, 800, default_height)
  146. viewstudents.pack()
  147. root.mainloop()
  148. if __name__=='__main__':
  149. main()