En este artículo veremos cómo podemos crear una calculadora de proporción áurea usando PyQt5. En matemáticas, dos cantidades están en la proporción áurea si su proporción es igual a la proporción entre su suma y la mayor de las dos cantidades. El valor de la proporción áurea es 1.61803398875. A continuación se muestra cómo se verá la calculadora de proporción áurea. PyQt5 es un juego 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 áurea
A / B = (A + B) / A = golden_ratio
Aquí A es la longitud más grande y B es la más corta, es decir, la segunda parte de la longitud y el valor de la proporción áurea es 1,61803398875.
Pasos de implementación de la GUI: 1. Cree una etiqueta de encabezado que muestre el nombre de la calculadora 2. Cree tres botones de opción para el primero, el segundo y la suma de las longitudes 3. Cree tres casillas para que el usuario ingrese la longitud específica 4. Cree un botón pulsador para calcular los otros valores según 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 los tres botones de opción 3. Dentro del método del botón de opción, qué botón de opción está marcado 4. De acuerdo con el botón de opción marcado, active el cuadro giratorio correspondiente y haga el resto de la casilla de giro deshabilitar 5. También asigne los valores de la bandera de acuerdo con el botón de radio seleccionado 6. Agregue la misma acción a los tres cuadros de giro 7. Dentro de la acción del cuadro de giro, verifique qué cuadro de giro está habilitado y haga que los otros valores de cuadro de giro sean cero 8. Agregue acción al botón pulsador 9. Dentro de la acción del botón pulsador verifique la bandera de acuerdo con la bandera con la ayuda de la fórmula de proporción áurea calcule las otras dos longitudes 10. Dé formato a los valores calculados y muestre los valores 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 datetime 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("Golden 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) # creating a radio button self.length_sum = QRadioButton("First + Second ", self) # setting geometry self.length_sum.setGeometry(50, 200, 140, 40) # setting font self.length_sum.setFont(QFont('Times', 9)) # creating a spin box self.l_s = QSpinBox(self) self.l_s.setMaximum(999999) # setting geometry to the spin box self.l_s.setGeometry(200, 200, 160, 40) # setting font self.l_s.setFont(QFont('Times', 9)) # setting alignment self.l_s.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) self.length_sum.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) self.l_s.valueChanged.connect(self.spin_method) # making all the spin box disabled self.l1.setDisabled(True) self.l2.setDisabled(True) self.l_s.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) self.l_s.setDisabled(True) # assigning flags self.check1 = True self.check2 = False self.check_sum = False elif self.length2.isChecked(): # making second spin box enable self.l2.setEnabled(True) # making rest two spin box disable self.l1.setDisabled(True) self.l_s.setDisabled(True) # assigning flags self.check1 = False self.check2 = True self.check_sum = False elif self.length_sum.isChecked(): # making third spin box enable self.l_s.setEnabled(True) # making rest two spin box disable self.l1.setDisabled(True) self.l2.setDisabled(True) # assigning flags self.check1 = False self.check2 = False self.check_sum = True def spin_method(self): # finding who called the method if self.l1.isEnabled(): # setting current values self.l2.setValue(0) self.l_s.setValue(0) elif self.l2.isEnabled(): # setting current values self.l1.setValue(0) self.l_s.setValue(0) else: # setting current values self.l2.setValue(0) self.l1.setValue(0) def calculate(self): golden = 1.61803398875 # if first value is selected if self.check1 == True: # getting spin box value A = self.l1.value() B = A / golden Sum = A + B elif self.check2 == True: # getting spin box value B = self.l2.value() A = B * golden Sum = A + B else: # getting spin box value Sum = self.l_s.value() A = Sum / golden B = Sum - A # formatting values upto two decimal A = "{:.2f}".format(A) B = "{:.2f}".format(B) Sum = "{:.2f}".format(Sum) # setting text to the label self.result.setText("A = " + str(A) + ", B = " + str(B) + " and Sum = " + str(Sum)) # 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