Assignment Calculator VS 2.0.2
Sun Jan 21 2024 20:27:23 GMT+0000 (Coordinated Universal Time)
Saved by @jrray
import tkinter as tk
from tkinter import messagebox
import webbrowser
num_assignments = 0
assignment_grades = []
assignment_totals = []
def ordinal(n):
return "%d%s" % (n,"tsnrhtdd"[(n//10%10!=1)*(n%10<4)*n%10::4])
html_link = "https://freetutoringcenter.com/"
def center_window(window):
window.update_idletasks()
width = window.winfo_width()
height = window.winfo_height()
x = (window.winfo_screenwidth() // 2) - (width // 2)
y = (window.winfo_screenheight() // 2) - (height // 2)
window.geometry('{}x{}+{}+{}'.format(width, height, x, y))
def open_link():
webbrowser.open(html_link)
def calculate_grade():
global num_assignments
num_assignments = int(num_assignments_entry.get())
for i in range(0, num_assignments, 1):
total_window = tk.Toplevel(root)
total_window.geometry("450x50")
center_window(total_window)
total_text = tk.Entry(total_window, width=50)
total_text.pack()
total_text.insert(0, f'Points possible for the {ordinal(i + 1)} assignment')
def submit_total(event=None):
total = int(total_text.get())
if total < 0:
raise ValueError("Total must be non-negative.")
assignment_totals.append(total)
total_window.destroy()
def clear_text(event):
total_text.delete(0,'end')
total_text.bind('<FocusIn>', clear_text) # Clear text when the widget is clicked
total_text.bind('<Return>', submit_total) # Submit total when Enter is pressed
submit_button = tk.Button(total_window, text="Submit Total", command=submit_total)
submit_button.pack()
total_window.wait_window()
grade_window = tk.Toplevel(root)
grade_window.geometry("450x50")
center_window(grade_window)
grade_text = tk.Entry(grade_window, width=50)
grade_text.pack()
grade_text.insert(0, f'Grade received on the {ordinal(1 + i)} assignment')
def submit_grade(event=None):
grade = int(grade_text.get())
if grade < 0:
raise ValueError("Grade must be non-negative.")
if grade > assignment_totals[i]:
raise ValueError("Grade cannot be greater than total.")
assignment_grades.append(grade)
grade_window.destroy()
def clear_grade_text(event):
grade_text.delete(0,'end')
grade_text.bind('<FocusIn>', clear_grade_text) # Clear text when the widget is clicked
grade_text.bind('<Return>', submit_grade) # Submit grade when Enter is pressed
submit_button = tk.Button(grade_window, text="Submit Grade", command=submit_grade)
submit_button.pack()
grade_window.wait_window()
assignment_totals_received = sum(assignment_grades)
assignment_totals_possible = sum(assignment_totals)
if assignment_totals_possible != 0:
assignment_percent = (assignment_totals_received / assignment_totals_possible) * 100
else:
assignment_percent = 0
result_window = tk.Toplevel(root)
result_window.geometry("600x300")
center_window(result_window)
result_label = tk.Label(result_window, text='You have completed {:.0f} so far in this course.\nThe total points received on the {:.0f} assignments is {:.0f} points, out of the {:.0f} points possible.'.format(num_assignments, num_assignments, assignment_totals_received, assignment_totals_possible))
result_label.pack(pady=10)
if assignment_percent > 90 and assignment_percent <= 100:
result_text = f"The grade you received was a {assignment_percent}% so far. You should be happy with an A; however, if not visit {html_link}."
elif assignment_percent > 80 and assignment_percent <= 90:
result_text = f"The grade you received so far in the course was a {assignment_percent}%. You should be happy with a B; however, if not review this website {html_link}."
elif assignment_percent > 70 and assignment_percent <= 80:
result_text = f'The grade received so far in the class was a {assignment_percent}%. You should raise your C by visiting {html_link}.'
elif assignment_percent > 60 and assignment_percent <= 70:
result_text = f'Your current grade is {assignment_percent}%, which is a D. You can raise your grade by visiting {html_link}.'
else:
result_text = f'You got an F with a low grade of {assignment_percent}%. You should immediately visit {html_link} and start to study.'
result_message = tk.Message(result_window, text=result_text)
result_message.pack(pady=10)
open_link_button = tk.Button(result_window, text="Open Link", command=open_link)
open_link_button.pack(pady=10)
root = tk.Tk()
root.geometry("800x800")
center_window(root)
num_assignments_label = tk.Label(root, text="How many assignments have been completed in the class so far?")
num_assignments_label.pack()
num_assignments_entry = tk.Entry(root)
num_assignments_entry.pack()
calculate_button = tk.Button(root, text="Calculate Grade", command=calculate_grade)
calculate_button.pack()
root.mainloop()



Comments