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 diferentesImplementació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