Calculadora de proporción de plata usando PyQt5

En este artículo veremos cómo podemos crear una calculadora de proporción de plata usando PyQt5. En matemáticas, dos cantidades están en la razón de plata si la razón de la suma de la menor y el doble de la mayor de esas cantidades, a la cantidad mayor, es la misma que la razón de la mayor a la menor. A continuación se muestra cómo se verá la calculadora de proporción de plata
 

PyQt5 es un kit de herramientas GUI multiplataforma, un conjunto de enlaces de Python para Qt v5. Uno puede desarrollar una aplicación de escritorio interactiva con tanta facilidad debido a las herramientas y la simplicidad que ofrece esta biblioteca. A continuación se muestra el comando para instalar el PyQt5
 

pip install PyQt5

Concepto: 
a continuación se muestra la fórmula para calcular la proporción de plata 
 

A/B = 1 + ?2

Aquí A es la longitud más grande y B es la más corta, es decir, la segunda parte de la longitud, tanto A como B deben ser mayores que cero.
 

Pasos de implementación de la GUI: 
1. Cree una etiqueta de encabezado que muestre el nombre de la calculadora 
2. Cree dos botones de radio para seleccionar entre la primera y la segunda longitud 
3. Cree dos casillas para que el usuario ingrese la longitud específica 
4. Cree un botón pulsador para calcular el otro valores de acuerdo con la proporción áurea 
5. Cree una etiqueta para mostrar los valores calculados
Implementación de back-end: 
1. Inicialmente deshabilite todos los cuadros giratorios 
2. Agregue la misma acción a ambos botones de 
opción 3. Dentro del método del botón de opción, verifique qué botón de opción está marcado 
4. De acuerdo con el botón de radio marcado, active el cuadro de número correspondiente y deshabilite el otro cuadro de número 
5. También asigne los valores de las banderas de acuerdo con el botón de radio seleccionado 
6. Agregue la misma acción a ambos cuadros de  selección
7. Dentro de la acción del cuadro de selección, verifique qué cuadro de selección está habilitado y haga que el valor de otro cuadro de selección sea cero 
8. Agregue acción al botón pulsador 
9. Dentro de la acción del botón, verifique la bandera de acuerdo con la bandera con la ayuda de la fórmula de proporción de plata, calcule la otra longitud 
10. Formatee la longitud calculada y muestre la longitud con la ayuda de la etiqueta de resultado 
 

A continuación se muestra la implementación. 
 

Python3

# importing 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 = 430
 
        # 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("Silver Ratio Calculator", self)
 
        head.setWordWrap(True)
 
        # setting geometry to the head
        head.setGeometry(0, 10, 400, 60)
 
        # 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 radio button
        self.length1 = QRadioButton("First Length (A)", self)
 
        # setting geometry
        self.length1.setGeometry(50, 90, 140, 40)
 
        # setting font
        self.length1.setFont(QFont('Times', 9))
 
        # creating a spin box
        self.l1 = QSpinBox(self)
        self.l1.setMaximum(999999)
 
        # setting geometry to the spin box
        self.l1.setGeometry(200, 90, 160, 40)
 
        # setting font
        self.l1.setFont(QFont('Times', 9))
 
        # setting alignment
        self.l1.setAlignment(Qt.AlignCenter)
 
        # creating a radio button
        self.length2 = QRadioButton("Second Length (B)", self)
 
        # setting geometry
        self.length2.setGeometry(50, 150, 145, 40)
 
        # setting font
        self.length2.setFont(QFont('Times', 9))
 
        # creating a spin box
        self.l2 = QSpinBox(self)
        self.l2.setMaximum(999999)
 
        # setting geometry to the spin box
        self.l2.setGeometry(200, 150, 160, 40)
 
        # setting font
        self.l2.setFont(QFont('Times', 9))
 
        # setting alignment
        self.l2.setAlignment(Qt.AlignCenter)
 
 
        # adding same action to all the radio button
        self.length1.clicked.connect(self.radio_method)
        self.length2.clicked.connect(self.radio_method)
 
        # adding same action to all the spin box
        self.l1.valueChanged.connect(self.spin_method)
        self.l2.valueChanged.connect(self.spin_method)
 
        # making all the spin box disabled
        self.l1.setDisabled(True)
        self.l2.setDisabled(True)
 
 
 
        # creating a push button
        calculate = QPushButton("Calculate", self)
 
        # setting geometry to the push button
        calculate.setGeometry(100, 270, 200, 40)
 
        # adding action to the button
        calculate.clicked.connect(self.calculate)
 
        # adding color effect to the push button
        color = QGraphicsColorizeEffect()
        color.setColor(Qt.blue)
        calculate.setGraphicsEffect(color)
 
 
        # creating a label to show result
        self.result = QLabel(self)
 
        # setting properties to result label
        self.result.setAlignment(Qt.AlignCenter)
 
        # setting geometry
        self.result.setGeometry(50, 330, 300, 70)
 
        # making it multi line
        self.result.setWordWrap(True)
 
        # setting stylesheet
        # adding border and background
        self.result.setStyleSheet("QLabel"
                                  "{"
                                  "border : 3px solid black;"
                                  "background : white;"
                                  "}")
 
        # setting font
        self.result.setFont(QFont('Arial', 11))
 
 
    # method called by the radio buttons
    def radio_method(self):
 
        # checking who is checked and who is unchecked
        # if first radio button is checked
        if self.length1.isChecked():
 
            # making first spin box enable
            self.l1.setEnabled(True)
 
            # making rest two spin box disable
            self.l2.setDisabled(True)
 
 
            # assigning flags
            self.check1 = True
            self.check2 = False
 
        elif self.length2.isChecked():
 
            # making second spin box enable
            self.l2.setEnabled(True)
 
            # making rest two spin box disable
            self.l1.setDisabled(True)
 
 
            # assigning flags
            self.check1 = False
            self.check2 = True
 
 
    def spin_method(self):
 
        # finding who called the method
        if self.l1.isEnabled():
 
            # setting current values
            self.l2.setValue(0)
 
 
        elif self.l2.isEnabled():
 
            # setting current values
            self.l1.setValue(0)
 
 
    def calculate(self):
    
        # silver ratio value
        silver = 2.414
 
 
        # if first value is selected
        if self.check1 == True:
 
            # getting spin box value
            A = self.l1.value()
 
            # calculating smaller length
            B = A / silver
 
        elif self.check2 == True:
 
            # getting spin box value
            B = self.l2.value()
 
            # calculating larger length
            A = B * silver
 
 
        # formatting values upto two decimal
        A = "{:.2f}".format(A)
        B = "{:.2f}".format(B)
 
        # setting text to the label
        self.result.setText("A = " + str(A) + ", B = " + str(B))
 
 
 
 
 
# 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 *