Python – Calculadora de edad usando PyQt

En este artículo veremos cómo podemos crear una calculadora de edad usando PyQt5.

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. Tiene que ser instalado usando el comando dado a continuación

pip install PyQt5

A continuación se muestra cómo se verá la calculadora de edad

Pasos de implementación de GUI:
1. Cree una etiqueta principal para el título del juego, configure sus propiedades
2. Cree una etiqueta de fecha de nacimiento, debajo de esta etiqueta cree el objeto QDateEdit para recibir la fecha y configure sus propiedades
3. Cree una etiqueta de fecha determinada , debajo de esta etiqueta, cree el objeto QDateEdit para recibir la nueva fecha y establezca sus propiedades
. 4. Cree un botón pulsador que, cuando se presione, se calcule la fecha
. 5. Cree una etiqueta de resultado para mostrar el resultado, es decir, la edad calculada.

Pasos de implementación de back-end:
1. Agregue una acción al primer QDateEdit cuando se cambie la fecha
2. Dentro de la acción de edición de la primera fecha, obtenga la fecha de la edición de la segunda fecha y establezca esta fecha como la fecha máxima de la edición de la primera fecha
3. Agregue la acción a la segunda edición de fecha cuando se cambia la fecha
4. Dentro de la segunda acción de edición de fecha, obtenga la fecha de la primera edición de fecha y establezca esta fecha como la fecha mínima de la segunda edición de fecha
5. Configure diferentes a las ediciones de fecha de modo que la primera fecha debe ser menos de la segunda fecha
6. Agregue acción al botón pulsador
7. Dentro de la acción del botón pulsador, obtenga las fechas de ambas ediciones de fecha y calcule la diferencia y muestre la diferencia en la pantalla con la ayuda de la etiqueta de resultado

A continuación se muestra la implementación.

# 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("Age calculator")
  
        # setting geometry
        self.setGeometry(100, 100, 500, 400)
  
        # calling method
        self.UiComponents()
  
        # showing all the widgets
        self.show()
  
    # method for components
    def UiComponents(self):
  
        # creating head label
        head = QLabel("Age Calculator", self)
  
        # setting geometry to the head
        head.setGeometry(100, 10, 300, 60)
  
        # font
        font = QFont('Times', 14)
        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)
        head.setStyleSheet("color : green;")
  
  
        # D.O.B label
        dob = QLabel("Date of Birth", self)
  
        # setting geometry
        dob.setGeometry(0, 80, 250, 50)
  
        # setting alignment and font
        dob.setAlignment(Qt.AlignCenter)
        dob.setFont(QFont('Times', 10))
  
        # given date label
        given = QLabel("Given Date", self)
  
        # setting geometry
        given.setGeometry(300, 80, 250, 50)
  
        # setting alignment and font
        given.setAlignment(Qt.AlignCenter)
        given.setFont(QFont('Times', 10))
  
        # creating a QDateEdit to get the d.o.b
        self.first = QDateEdit(self)
  
        # setting geometry
        self.first.setGeometry(25, 130, 200, 50)
  
        # setting font and alignment
        self.first.setAlignment(Qt.AlignCenter)
        self.first.setFont(QFont('Arial', 9))
  
        # adding action to the first
        # when date get change
        self.first.dateChanged.connect(self.first_action)
  
        # creating a QDateEdit to get the given date
        self.second = QDateEdit(self)
  
        # setting geometry
        self.second.setGeometry(275, 130, 200, 50)
  
        # setting font and alignment
        self.second.setAlignment(Qt.AlignCenter)
        self.second.setFont(QFont('Arial', 9))
  
        # adding action to the second
        # when date get change
        self.second.dateChanged.connect(self.second_action)
  
        # create a push button for calculate
        calculate = QPushButton("Calculate", self)
  
        # setting geometry to the push button
        calculate.setGeometry(200, 210, 100, 40)
  
        # setting color effect to the push button
        color = QGraphicsColorizeEffect()
        color.setColor(Qt.darkGreen)
        calculate.setGraphicsEffect(color)
  
        # adding action to the calculate button
        calculate.clicked.connect(self.find_age)
  
        # creating a result label to show the ans
        self.result = QLabel(self)
  
        # setting geometry
        self.result.setGeometry(50, 280, 400, 80)
  
        # setting style sheet and the font
        self.result.setAlignment(Qt.AlignCenter)
        self.result.setFont(QFont('Times', 12))
  
        # setting stylesheet
        self.result.setStyleSheet("QLabel"
                                  "{"
                                  "border : 2px solid black;"
                                  "background : lightgrey;"
                                  "}")
  
        # making label multi line
        self.result.setWordWrap(True)
  
        # set dates to the first and second
        self.first.setDate(QDate(2000, 1, 1))
        self.second.setDate(QDate(2020, 1, 1))
  
  
    # method called by the first date edit
    def first_action(self):
  
        # get the second date
        date = self.second.date()
  
        # set the maximum date in first
        self.first.setMaximumDate(date)
  
    # method called by the first date edit
    def second_action(self):
  
        # get the first date
        date = self.first.date()
  
        # set the maximum date in first
        self.second.setMinimumDate(date)
  
  
    # method called by the push button
    def find_age(self):
  
        # get the first age
        get_Qdate1 = self.first.date()
        birth_year = get_Qdate1.year()
        birth_month = get_Qdate1.month()
        birth_day = get_Qdate1.day()
  
        # get the second age
        get_Qdate2 = self.second.date()
        given_year = get_Qdate2.year()
        given_month = get_Qdate2.month()
        given_day = get_Qdate2.day()
  
        # if birth date is greater then given birth_month
        # then donot count this month and add 30 to the date so
        # as to subtract the date and get the remaining days
        month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
  
        if (birth_day > given_day):
            given_month = given_month - 1
            given_day = given_day + month[birth_month - 1]
  
        # if birth month exceeds given month, then
        # donot count this year and add 12 to the
        # month so that we can subtract and find out
        # the difference
        if (birth_month > given_month):
            given_year = given_year - 1
            given_month = given_month + 12
  
        # calculate day, month, year
        calculated_day = given_day - birth_day
        calculated_month = given_month - birth_month
        calculated_year = given_year - birth_year
  
        # setting text to the result
        self.result.setText(str(calculated_day) + " Day(s), " + str(calculated_month)
                            + " Month(s), " + str(calculated_year) + " Year(s)")
  
  
  
    # 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 *