1/4 Mile Calculator using PyQt5 in Python

Prerequisite : Introduction to pyqt-5
 
In this article, we will see how we can create a quarter(1/4) mile calculator using PyQt5. Quarter mile calculator is used to determine the terminal speed (trap speed) and quarter-mile elapsed time (ET) of a vehicle based on its weight and power.
Below image shows how the 1/4 mile calculator looks like :
 
 
1/4 mile calculator
The quarter-mile calculator employs three distinct empirical equations to determine the quarter-mile elapsed time (ET). These are as follows:
1. Roger Huntington’s Equation:
Time = 6.290 × (Weight / Power)^(1/3)
2. Geoffrey Fox’s Equations:
Time = 6.269 × (Weight / Power)^(1/3)
3. Patrick Hale’s Equations:
Time = 5.825 × (Weight / Power)^(1/3)
Note: Here weight is in Pound (lb) and power is in horsepower (hp) units.
 
GUI Implementation Steps :
1. Create a heading label that display the calculator name
2. Create label and combo box pair for selecting equation, label to show what user has to select and combo box to select
3. Similarly create a pair of label and line edit to get the weight and power of car
4. Create a push button to calculate the time
5. Create a label to show the calculated time
Back-End Implementation :
1. Make the combo box non editable
2. Make the line edit to accept only the number as input
3. Add action to the push button
4. Inside the push button action get the text of the line edits
5. Check if the line edit text is empty or zero then return so that function will not execute further
6. Convert the text value into integer
7. Get the selected option from the combo box and set constant value according to it
8. Calculate the time and show this value through the label
Below is the implementation :
 
Python3
| # importing required libraries fromPyQt5.QtWidgets import*fromPyQt5 importQtCore, QtGui fromPyQt5.QtGui import*fromPyQt5.QtCore import* importsys   classWindow(QMainWindow):      def__init__(self):         super().__init__()          # setting title         self.setWindowTitle("Python ")          # width of window         self.w_width =400         # height of window         self.w_height =450         # setting geometry         self.setGeometry(100, 100,                           self.w_width,                           self.w_height)          # calling method         self.UiComponents()          # showing all the widgets         self.show()      # method for components     defUiComponents(self):          # creating head label         head =QLabel("1/4 Mile Calculator",                        self)          # setting geometry to the head         head.setGeometry(0, 10, 400, 60)          # setting font         font =QFont('Times', 15)         font.setBold(True)         font.setItalic(True)         font.setUnderline(True)          # setting font to the head         head.setFont(font)          # setting alignment of the head         head.setAlignment(Qt.AlignCenter)          # setting color effect to the head         color =QGraphicsColorizeEffect(self)         color.setColor(Qt.darkCyan)         head.setGraphicsEffect(color)          # creating a label         e_label =QLabel("Equation", self)          # setting properties  label         e_label.setAlignment(Qt.AlignCenter)         e_label.setGeometry(20, 100, 170, 40)         e_label.setStyleSheet("QLabel"                              "{"                              "border : 2px solid black;"                              "background : rgba(70, 70, 70, 35);"                              "}")         e_label.setFont(QFont('Times', 9))          # creating a combo box to selected equation         self.equation =QComboBox(self)          # adding items to the combo box         items =["Huntington", "Fox", "Hale"]         self.equation.addItems(items)          # setting properties to the combo box         self.equation.setFont(QFont('Times', 9))         self.equation.setGeometry(200, 100, 180, 40)         self.equation.setEditable(False)           # creating a label         w_label =QLabel("Car Weight (lb)", self)          # setting properties to the label         w_label.setAlignment(Qt.AlignCenter)         w_label.setGeometry(20, 150, 170, 40)         w_label.setStyleSheet("QLabel"                              "{"                              "border : 2px solid black;"                              "background : rgba(70, 70, 70, 35);"                              "}")         w_label.setFont(QFont('Times', 9))          # creating a QLineEdit object         self.weight =QLineEdit(self)          # accepting only number as input         onlyInt =QIntValidator()         self.weight.setValidator(onlyInt)          # setting properties to the line edit         self.weight.setGeometry(200, 150, 180, 40)         self.weight.setAlignment(Qt.AlignCenter)         self.weight.setFont(QFont('Times', 9))          # creating a label         p_label =QLabel("Engine Power (hp) ", self)          # setting properties to the years label         p_label.setAlignment(Qt.AlignCenter)         p_label.setGeometry(20, 200, 170, 40)         p_label.setStyleSheet("QLabel"                              "{"                              "border : 2px solid black;"                              "background : rgba(70, 70, 70, 35);"                              "}")         p_label.setFont(QFont('Times', 9))          # creating a QLineEdit object         self.power =QLineEdit(self)          # accepting only number as input         onlyInt =QIntValidator()         self.power.setValidator(onlyInt)          # setting properties to the line edit         self.power.setGeometry(200, 200, 180, 40)         self.power.setAlignment(Qt.AlignCenter)         self.power.setFont(QFont('Times', 9))           # creating a push button         calculate =QPushButton("Calculate Time", self)          # setting geometry to the push button         calculate.setGeometry(125, 270, 150, 40)          # adding action to the calculate button         calculate.clicked.connect(self.calculate_action)          # creating a label to show percentile         self.result =QLabel(self)          # setting properties to result label         self.result.setAlignment(Qt.AlignCenter)         self.result.setGeometry(30, 340, 340, 80)         self.result.setWordWrap(True)         self.result.setStyleSheet("QLabel"                                  "{"                                  "border : 3px solid black;"                                  "background : white;"                                  "}")         self.result.setFont(QFont('Arial', 11))      # method for calculating the      # quarter-mile elapsed time (ET)     defcalculate_action(self):           # getting weight of car         weight =self.weight.text()          # getting power of engine         power =self.power.text()          # if no input is given close the function         iflen(weight) ==0orlen(power) ==0:             return         # converting weight into integer         weight =int(weight)          # converting power into integer         power =int(power)          # if user enter total value as 0         # return the function         ifpower ==0orweight ==0:             return         # getting the selected equation index         equation =self.equation.currentIndex()          # setting constant value according to the equation         # Roger Huntington's constant         ifequation ==0:             constant =6.290         # Geoffrey Fox's constant         elifequation ==1:             constant =6.269         # Patrick Hale's constant         else:             constant =5.825         # calculating the time         result =constant *((weight/power)**(1/3))          # formatting the time         result ="{:.2f}".format(result)          # setting text to the result label         self.result.setText("1/4 Mile Elapsed Time : "                            +str(result) +" seconds")   # create pyqt5 app App =QApplication(sys.argv)  # create the instance of our Window window =Window()  # start the app sys.exit(App.exec())  | 
Output : 
 
 
				 
					


