I'm working on an Unweighted GPA Calculator and I'm kind of new to the (Py)Qt Designer application. I have ran into a problem where I don't know how to get the results from the ComboBoxes to calculate it into a variable named gpa.
Basically, this is what I want to happen:
if the letter_grade1 ComboBox is A+ then it will add 4.0 to gpa
if the letter_grade2 ComboBox is B then it will add 3.0 to gpa
and later on after that, it'll divided by 5 since there's 5 ComboBoxes being calculated results gets printed and this all happens after the submit_grades button gets clicked.
Here's an image of what the Ui looks like:
and here's what the code looks like:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_unweight5(object):
def setupUi(self, unweight5):
unweight5.setObjectName("unweight5")
unweight5.resize(424, 228)
self.centralwidget = QtWidgets.QWidget(unweight5)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setHorizontalSpacing(10)
self.gridLayout.setVerticalSpacing(5)
self.gridLayout.setObjectName("gridLayout")
self.assessment_name = QtWidgets.QLineEdit(self.centralwidget)
self.assessment_name.setObjectName("assessment_name")
self.gridLayout.addWidget(self.assessment_name, 1, 0, 1, 1)
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setObjectName("label")
self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
self.submit_grades = QtWidgets.QPushButton(self.centralwidget)
self.submit_grades.setObjectName("submit_grades")
self.gridLayout.addWidget(self.submit_grades, 6, 0, 1, 3)
self.assessment_name5 = QtWidgets.QLineEdit(self.centralwidget)
self.assessment_name5.setObjectName("assessment_name5")
self.gridLayout.addWidget(self.assessment_name5, 5, 0, 1, 1)
self.assessment_name2 = QtWidgets.QLineEdit(self.centralwidget)
self.assessment_name2.setObjectName("assessment_name2")
self.gridLayout.addWidget(self.assessment_name2, 2, 0, 1, 1)
self.assessment_name4 = QtWidgets.QLineEdit(self.centralwidget)
self.assessment_name4.setObjectName("assessment_name4")
self.gridLayout.addWidget(self.assessment_name4, 4, 0, 1, 1)
self.assessment_name3 = QtWidgets.QLineEdit(self.centralwidget)
self.assessment_name3.setObjectName("assessment_name3")
self.gridLayout.addWidget(self.assessment_name3, 3, 0, 1, 1)
self.letter_grade5 = QtWidgets.QComboBox(self.centralwidget)
self.letter_grade5.setObjectName("letter_grade5")
self.letter_grade5.addItem("")
self.letter_grade5.addItem("")
self.letter_grade5.addItem("")
self.letter_grade5.addItem("")
self.letter_grade5.addItem("")
self.letter_grade5.addItem("")
self.letter_grade5.addItem("")
self.letter_grade5.addItem("")
self.letter_grade5.addItem("")
self.letter_grade5.addItem("")
self.letter_grade5.addItem("")
self.letter_grade5.addItem("")
self.gridLayout.addWidget(self.letter_grade5, 5, 1, 1, 2)
self.letter_grade3 = QtWidgets.QComboBox(self.centralwidget)
self.letter_grade3.setObjectName("letter_grade3")
self.letter_grade3.addItem("")
self.letter_grade3.addItem("")
self.letter_grade3.addItem("")
self.letter_grade3.addItem("")
self.letter_grade3.addItem("")
self.letter_grade3.addItem("")
self.letter_grade3.addItem("")
self.letter_grade3.addItem("")
self.letter_grade3.addItem("")
self.letter_grade3.addItem("")
self.letter_grade3.addItem("")
self.letter_grade3.addItem("")
self.gridLayout.addWidget(self.letter_grade3, 3, 1, 1, 2)
self.letter_grade4 = QtWidgets.QComboBox(self.centralwidget)
self.letter_grade4.setObjectName("letter_grade4")
self.letter_grade4.addItem("")
self.letter_grade4.addItem("")
self.letter_grade4.addItem("")
self.letter_grade4.addItem("")
self.letter_grade4.addItem("")
self.letter_grade4.addItem("")
self.letter_grade4.addItem("")
self.letter_grade4.addItem("")
self.letter_grade4.addItem("")
self.letter_grade4.addItem("")
self.letter_grade4.addItem("")
self.letter_grade4.addItem("")
self.gridLayout.addWidget(self.letter_grade4, 4, 1, 1, 2)
self.letter_grade2 = QtWidgets.QComboBox(self.centralwidget)
self.letter_grade2.setObjectName("letter_grade2")
self.letter_grade2.addItem("")
self.letter_grade2.addItem("")
self.letter_grade2.addItem("")
self.letter_grade2.addItem("")
self.letter_grade2.addItem("")
self.letter_grade2.addItem("")
self.letter_grade2.addItem("")
self.letter_grade2.addItem("")
self.letter_grade2.addItem("")
self.letter_grade2.addItem("")
self.letter_grade2.addItem("")
self.letter_grade2.addItem("")
self.gridLayout.addWidget(self.letter_grade2, 2, 1, 1, 2)
self.letter_grade1 = QtWidgets.QComboBox(self.centralwidget)
self.letter_grade1.setObjectName("letter_grade1")
self.letter_grade1.addItem("")
self.letter_grade1.addItem("")
self.letter_grade1.addItem("")
self.letter_grade1.addItem("")
self.letter_grade1.addItem("")
self.letter_grade1.addItem("")
self.letter_grade1.addItem("")
self.letter_grade1.addItem("")
self.letter_grade1.addItem("")
self.letter_grade1.addItem("")
self.letter_grade1.addItem("")
self.letter_grade1.addItem("")
self.gridLayout.addWidget(self.letter_grade1, 1, 1, 1, 2)
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setAlignment(QtCore.Qt.AlignCenter)
self.label_3.setObjectName("label_3")
self.gridLayout.addWidget(self.label_3, 0, 1, 1, 2)
unweight5.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(unweight5)
self.menubar.setGeometry(QtCore.QRect(0, 0, 424, 22))
self.menubar.setObjectName("menubar")
unweight5.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(unweight5)
self.statusbar.setObjectName("statusbar")
unweight5.setStatusBar(self.statusbar)
self.retranslateUi(unweight5)
QtCore.QMetaObject.connectSlotsByName(unweight5)
def retranslateUi(self, unweight5):
_translate = QtCore.QCoreApplication.translate
unweight5.setWindowTitle(_translate("unweight5", "Unweighted Calculator"))
self.label.setText(_translate("unweight5", "Course Name"))
self.submit_grades.setText(_translate("unweight5", "Submit"))
self.letter_grade5.setItemText(0, _translate("unweight5", "A+"))
self.letter_grade5.setItemText(1, _translate("unweight5", "A"))
self.letter_grade5.setItemText(2, _translate("unweight5", "A-"))
self.letter_grade5.setItemText(3, _translate("unweight5", "B+"))
self.letter_grade5.setItemText(4, _translate("unweight5", "B"))
self.letter_grade5.setItemText(5, _translate("unweight5", "B-"))
self.letter_grade5.setItemText(6, _translate("unweight5", "C+"))
self.letter_grade5.setItemText(7, _translate("unweight5", "C"))
self.letter_grade5.setItemText(8, _translate("unweight5", "C-"))
self.letter_grade5.setItemText(9, _translate("unweight5", "D+"))
self.letter_grade5.setItemText(10, _translate("unweight5", "D"))
self.letter_grade5.setItemText(11, _translate("unweight5", "F"))
self.letter_grade3.setItemText(0, _translate("unweight5", "A+"))
self.letter_grade3.setItemText(1, _translate("unweight5", "A"))
self.letter_grade3.setItemText(2, _translate("unweigt5", "A-"))
self.letter_grade3.setItemText(3, _translate("unweight5", "B+"))
self.letter_grade3.setItemText(4, _translate("unweight5", "B"))
self.letter_grade3.setItemText(5, _translate("unweight5", "B-"))
self.letter_grade3.setItemText(6, _translate("unweight5", "C+"))
self.letter_grade3.setItemText(7, _translate("unweight5", "C"))
self.letter_grade3.setItemText(8, _translate("unweight5", "C-"))
self.letter_grade3.setItemText(9, _translate("unweight5", "D+"))
self.letter_grade3.setItemText(10, _translate("unweight5", "D"))
self.letter_grade3.setItemText(11, _translate("unweight5", "F"))
self.letter_grade4.setItemText(0, _translate("unweight5", "A+"))
self.letter_grade4.setItemText(1, _translate("unweight5", "A"))
self.letter_grade4.setItemText(2, _translate("unweight5", "A-"))
self.letter_grade4.setItemText(3, _translate("unweight5", "B+"))
self.letter_grade4.setItemText(4, _translate("unweight5", "B"))
self.letter_grade4.setItemText(5, _translate("unweight5", "B-"))
self.letter_grade4.setItemText(6, _translate("unweight5", "C+"))
self.letter_grade4.setItemText(7, _translate("unweight5", "C"))
self.letter_grade4.setItemText(8, _translate("unweight5", "C-"))
self.letter_grade4.setItemText(9, _translate("unweight5", "D+"))
self.letter_grade4.setItemText(10, _translate("unweight5", "D"))
self.letter_grade4.setItemText(11, _translate("unweight5", "F"))
self.letter_grade2.setItemText(0, _translate("unweight5", "A+"))
self.letter_grade2.setItemText(1, _translate("unweight5", "A"))
self.letter_grade2.setItemText(2, _translate("unweight5", "A-"))
self.letter_grade2.setItemText(3, _translate("unweight5", "B+"))
self.letter_grade2.setItemText(4, _translate("unweight5", "B"))
self.letter_grade2.setItemText(5, _translate("unweight5", "B-"))
self.letter_grade2.setItemText(6, _translate("unweight5", "C+"))
self.letter_grade2.setItemText(7, _translate("unweight5", "C"))
self.letter_grade2.setItemText(8, _translate("unweight5", "C-"))
self.letter_grade2.setItemText(9, _translate("unweight5", "D+"))
self.letter_grade2.setItemText(10, _translate("unweight5", "D"))
self.letter_grade2.setItemText(11, _translate("unweight5", "F"))
self.letter_grade1.setItemText(0, _translate("unweight5", "A+"))
self.letter_grade1.setItemText(1, _translate("unweight5", "A"))
self.letter_grade1.setItemText(2, _translate("unweight5", "A-"))
self.letter_grade1.setItemText(3, _translate("unweight5", "B+"))
self.letter_grade1.setItemText(4, _translate("unweight5", "B"))
self.letter_grade1.setItemText(5, _translate("unweight5", "B-"))
self.letter_grade1.setItemText(6, _translate("unweight5", "C+"))
self.letter_grade1.setItemText(7, _translate("unweight5", "C"))
self.letter_grade1.setItemText(8, _translate("unweight5", "C-"))
self.letter_grade1.setItemText(9, _translate("unweight5", "D+"))
self.letter_grade1.setItemText(10, _translate("unweight5", "D"))
self.letter_grade1.setItemText(11, _translate("unweight5", "F"))
self.label_3.setText(_translate("unweight5", "Grade"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
unweight5 = QtWidgets.QMainWindow()
ui = Ui_unweight5()
ui.setupUi(unweight5)
unweight5.show()
sys.exit(app.exec_())
Thanks for your time!
Assuming that the .py file that you sample is called design.py you must create another .py file where the logic will be to avoid having many lines of code in a single file.
Going the problem, the idea is to have a Look At Table where the options are related to the values through a dictionary, then you calculate the average.
from PyQt5 import QtCore, QtGui, QtWidgets
from design import Ui_unweight5
class Unweight5(QtWidgets.QMainWindow, Ui_unweight5):
def __init__(self, parent=None):
super(Unweight5, self).__init__(parent)
self.setupUi(self)
self.lut = {"A+": 4.0,
"A": 3.5,
"A-": 3.2,
"B+": 3.0,
"B": 2.8,
"B-": 2.7,
"C+": 2.5,
"C": 2.1,
"C-": 1.5,
"D+": 1,
"D": 0.6,
"F": 0.4}
self.submit_grades.clicked.connect(self.on_clicked)
def on_clicked(self):
combos = (self.letter_grade1, self.letter_grade2, self.letter_grade3, self.letter_grade4, self.letter_grade5)
vals = [self.lut[combo.currentText()] for combo in combos]
print("results:", sum(vals)/len(vals))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = Unweight5()
w.show()
sys.exit(app.exec_())