Calculadora de 1/4 de milla usando PyQt5 en Python

Requisito previo: Introducción a pyqt-5
 

En este artículo, veremos cómo podemos crear una calculadora de un cuarto (1/4) de milla usando PyQt5 . La calculadora de un cuarto de milla se usa para determinar la velocidad terminal (velocidad trampa) y el tiempo transcurrido (ET) de un cuarto de milla de un vehículo en función de su peso y potencia.

La imagen de abajo muestra cómo se ve la calculadora de 1/4 de milla:
 

calculadora de 1/4 de milla

La calculadora del cuarto de milla emplea tres ecuaciones empíricas distintas para determinar el tiempo transcurrido (ET) del cuarto de milla. Estos son los siguientes:

1. Ecuación de Roger Huntington: 

Time = 6.290 × (Weight / Power)^(1/3)

2. Ecuaciones de Geoffrey Fox:

Time = 6.269 × (Weight / Power)^(1/3)

3. Ecuaciones de Patrick Hale: 

Time = 5.825 × (Weight / Power)^(1/3)

Nota: Aquí el peso está en libras (lb) y la potencia en unidades de caballos de fuerza (hp).
 

Pasos de implementación de la GUI:  
1. Cree una etiqueta de encabezado que muestre el nombre de la calculadora 
2. Cree un par de etiquetas y cuadros combinados para seleccionar la ecuación, una etiqueta para mostrar lo que el usuario tiene que seleccionar y un cuadro combinado para seleccionar 
3. De manera similar, cree un par de etiquetas y edite la línea para obtener el peso y la potencia del automóvil 
4. Cree un botón pulsador para calcular el tiempo 
5. Cree una etiqueta para mostrar el tiempo calculado

Implementación de back-end :  
1 . Hacer que el cuadro combinado no sea editable 
2. Hacer la edición de línea para aceptar solo el número como entrada 
3. Agregar acción al botón 
4. Dentro de la acción del botón obtener el texto de las ediciones de línea 
5. Verificar si el texto de edición de línea es vacío o cero y luego regrese para que la función no se ejecute más 
6. Convierta el valor del texto en un número entero 
7 . Obtenga la opción seleccionada del cuadro combinado y establezca el valor constante de acuerdo con ella 
8. Calcule el tiempo y muestre este valor a través de la etiqueta 
 

A continuación se muestra la implementación:
 

Python3

# importing required libraries
from PyQt5.QtWidgets import *
from PyQt5 import QtCore, QtGui
from PyQt5.QtGui import *
from PyQt5.QtCore import *
  
import sys
  
  
class Window(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
    def UiComponents(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)
    def calculate_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
        if len(weight) == 0 or len(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
        if power == 0 or weight == 0:
            return
  
        # getting the selected equation index
        equation = self.equation.currentIndex()
  
        # setting constant value according to the equation
        # Roger Huntington's constant
        if equation == 0:
            constant = 6.290
  
        # Geoffrey Fox's constant
        elif equation == 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())

Producción : 
 

Publicación traducida automáticamente

Artículo escrito por rakshitarora y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *