Python CGPA Calculator with GUI Tkinter.
Source Code:
main.py
from tkinter import *
from tkinter import messagebox
from matplotlib.pyplot import text
class App:
def __init__(self, parent):
self.parent = parent
self.frame_1 = Frame(parent)
self.frame_1.pack()
self.lbl_1 = Label(self.frame_1, text="Current CGPA :")
self.lbl_1.grid(row=0, column=0)
self.entry_1 = Entry(self.frame_1)
self.entry_1.grid(row=0, column=1)
self.lbl_2 = Label(self.frame_1, text="Units Completed :")
self.lbl_2.grid(row=1, column=0)
self.entry_2 = Entry(self.frame_1)
self.entry_2.grid(row=1, column=1)
self.lbl_3 = Label(self.frame_1, text="Number of Courses to add :")
self.lbl_3.grid(row=2, column=0)
self.entry_3 = Entry(self.frame_1)
self.entry_3.grid(row=2, column=1)
self.btn_1 = Button(parent, text="Add Courses !",
command=self.add_courses)
self.btn_1.pack(pady=8)
self.frame_2 = Frame(parent)
self.frame_2.pack()
def add_courses(self):
if ((self.entry_3.get() != '') & (self.entry_3.get().isdigit())):
self.num_courses = int(self.entry_3.get())
self.grades_list = []
self.units_list = []
self.lbl_units = Label(self.frame_2, text="Units :")
self.lbl_units.grid(row=0, column=0)
self.lbl_grades = Label(self.frame_2, text="Grades :")
self.lbl_grades.grid(row=0, column=1)
for i in range(0, self.num_courses):
self.units_list.append(
Spinbox(self.frame_2, values=(1, 2, 3, 4, 5, 20)))
self.units_list[i].grid(row=i+1, column=0, padx=10, pady=10)
self.grades_list.append(Spinbox(self.frame_2, values=(
"A", "A-", "B", "B-", "C", "C-", "D", "E")))
self.grades_list[i].grid(row=i+1, column=1, padx=10, pady=10)
self.btn_calcCG = Button(
self.parent, text="Calculate CGPA", command=self.calc_CG)
self.btn_calcCG.pack(pady=8)
self.btn_1.config(state=DISABLED)
else:
messagebox.showinfo("Hey ! ", "Enter a Valid Value")
def calc_CG(self):
print("Calculating !")
credits_this_sem = 0
units_this_sem = 0
for j in range(0, self.num_courses):
credits_this_sem = credits_this_sem + \
int(self.units_list[j].get()) * \
(self.grade(self.grades_list[j].get()))
units_this_sem = units_this_sem + int(self.units_list[j].get())
final_cgpa = (credits_this_sem + float(self.entry_1.get()) *
int(self.entry_2.get())) / (units_this_sem+int(self.entry_2.get()))
messagebox.showinfo("Predicted CGPA ", str(final_cgpa))
def grade(self, grd):
dict_ = {'A': 10, 'A-': 9, 'B': 8, 'B-': 7,
'C': 6, 'C-': 5, 'D': 4, 'E': 2}
return dict_[grd]
root = Tk()
root.title("ProgramSolve.com")
app = App(root)
root.mainloop()
Output:


