Calculadora de relación de aspecto usando PyQt5

En este artículo veremos cómo podemos crear una calculadora de relación de aspecto usando PyQt5. La relación de aspecto de una imagen es la relación entre su ancho y su alto. Se expresa comúnmente como dos números separados por dos puntos, como en 16:9. Para una relación de aspecto x:y, la imagen tiene x unidades de ancho y y unidades de alto. A continuación se muestra cómo se verá la calculadora.

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:
el usuario debe seleccionar un ancho y una altura para los cuales la calculadora encontrará los valores de la diagonal y la relación de aspecto, a continuación se muestra la fórmula para calcular la diagonal

diagonal = math.sqrt(width**2 + height**2)

A continuación se muestra la fórmula para calcular la relación de aspecto (formato x: 1)

x = width / height

A continuación se muestra la fórmula para calcular la relación de aspecto (formato ancho:alto)

w = width / gcd
h = height / gcd

Aquí mcd es el Máximo Común Divisor (HCF) de ancho y alto

Pasos de implementación de la GUI:
1. Cree una etiqueta de encabezado que muestre el nombre de la calculadora
2. Cree dos etiquetas para decirle al usuario que ingrese el ancho y el alto
3. Cree dos casillas para ingresar el ancho y el alto
4. Cree un botón para calcular las proporciones
5 Cree tres etiquetas de resultados para mostrar tres resultados diferentes

Implementación de back-end:
1. Establezca el rango para cada uno de los cuadros giratorios con un valor mínimo igual a 1 para que el usuario no pueda ingresar 0 como entrada
2. Establezca varias propiedades como alineación, geometría para cada uno de los widgets en la ventana
3. Agregue una acción al botón pulsador cuando se haga clic en él
4. Dentro de la acción del botón pulsador, obtenga el ancho y el alto de los cuadros giratorios
5. Calcule el valor de la diagonal, formatéelo y muestre el valor de la diagonal con la ayuda de la primera etiqueta de resultado
6 Calcule la relación de aspecto sumergiéndose entre sí, esto demostrará la relación de aspecto en formato x: 1
7. Muestre esta relación con la ayuda de la segunda etiqueta de resultado
8. Encuentre el gcd de ancho y alto con la ayuda del algoritmo euclidiano
9. Divida el ancho y alto con el mcd
10. Muestre el nuevo ancho y alto en formato de relación de aspecto con la ayuda de la tercera etiqueta

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 math
  
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 = 460
  
        # 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("Aspect Ratio Calculator", self)
  
        # 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 label
        w_label = QLabel("Width", self)
  
        # setting properties to the  label
        w_label.setAlignment(Qt.AlignCenter)
        w_label.setGeometry(20, 100, 170, 40)
        w_label.setStyleSheet("QLabel"
                              "{"
                              "border : 2px solid black;"
                              "background : rgba(70, 70, 70, 35);"
                              "}")
        w_label.setFont(QFont('Times', 9))
  
        # creating a spin box
        self.w_spin = QSpinBox(self)
  
        # setting geometry to the spin box
        self.w_spin.setGeometry(200, 100, 180, 40)
  
        # setting range to the spin box
        self.w_spin.setRange(1, 999999)
  
        # setting font and alignment
        self.w_spin.setFont(QFont('Times', 9))
        self.w_spin.setAlignment(Qt.AlignCenter)
  
        # creating a label
        h_label = QLabel("Height", self)
  
        # setting properties to the label
        h_label.setAlignment(Qt.AlignCenter)
        h_label.setGeometry(20, 150, 170, 40)
        h_label.setStyleSheet("QLabel"
                              "{"
                              "border : 2px solid black;"
                              "background : rgba(70, 70, 70, 35);"
                              "}")
        h_label.setFont(QFont('Times', 9))
  
        # creating a spin box
        self.h_spin = QSpinBox(self)
  
        # setting geometry to the spin box
        self.h_spin.setGeometry(200, 150, 180, 40)
  
        # setting range
        self.h_spin.setRange(1, 999999)
  
        # setting font and alignment
        self.h_spin.setFont(QFont('Times', 9))
        self.h_spin.setAlignment(Qt.AlignCenter)
  
        # creating a push button
        calculate = QPushButton("Calculate", self)
  
        # setting geometry to the push button
        calculate.setGeometry(125, 220, 150, 40)
  
        # adding action to the calculate button
        calculate.clicked.connect(self.calculate_action)
  
        # creating a label
        self.result1 = QLabel(self)
  
        # setting properties to result label
        self.result1.setAlignment(Qt.AlignCenter)
        self.result1.setGeometry(25, 300, 350, 40)
        self.result1.setStyleSheet("QLabel"
                                  "{"
                                  "border : 3px solid black;"
                                  "background : white;"
                                  "}")
        self.result1.setFont(QFont('Arial', 11))
  
        # creating a label
        self.result2 = QLabel(self)
  
        # setting properties to result label
        self.result2.setAlignment(Qt.AlignCenter)
        self.result2.setGeometry(25, 350, 350, 40)
        self.result2.setStyleSheet("QLabel"
                                   "{"
                                   "border : 3px solid black;"
                                   "background : white;"
                                   "}")
        self.result2.setFont(QFont('Arial', 11))
  
        # creating a label
        self.result3 = QLabel(self)
  
        # setting properties to result label
        self.result3.setAlignment(Qt.AlignCenter)
        self.result3.setGeometry(25, 400, 350, 40)
        self.result3.setStyleSheet("QLabel"
                                   "{"
                                   "border : 3px solid black;"
                                   "background : white;"
                                   "}")
        self.result3.setFont(QFont('Arial', 11))
  
    def calculate_action(self):
  
        # getting width
        width = self.w_spin.value()
  
        # getting height
        height = self.h_spin.value()
  
        # calculating diagonal
        diagonal = width**2 + height**2
        diagonal = math.sqrt(diagonal)
  
        # doing formatting of diagonal
        diagonal = '%.2f' % diagonal
  
        # setting text to the result 1
        self.result1.setText("Diagonal = " + diagonal)
  
        # calculating aspect ratio (x:1 format)
        x = width / height
  
        # formatting X value
        x = '%.2f' % x
  
        # setting text to the result 2
        self.result2.setText("Aspect Ratio (x:1 format) = " + x + " : 1")
  
        # calculating aspect ratio (w:h format)
        # method to calculate GCD using Euclidean Algorithm
        def computeGCD(x, y):
            # looping
            while (y):
                x, y = y, x % y
  
            # returning gcd value
            return x
  
        gcd = computeGCD(width, height)
  
        # setting width and height value
        width = width//gcd
        height = height//gcd
  
        # setting text to the result 3
        self.result3.setText("Aspect ratio (w:h format) = " + str(width) + " : " + str(height))
  
  
# 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 *