In this article we will see how we can create an age calculator using PyQt5.
PyQt5 is cross-platform GUI toolkit, a set of python bindings for Qt v5. One can develop an interactive desktop application with so much ease because of the tools and simplicity provided by this library. It has to be installed using command given below
pip install PyQt5
Below is how age calculator will look like
GUI Implementation Steps :
1. Create a head label for the title of the game, set its properties
2. Create a date of birth label, below this label create QDateEdit object to receive the date and set their properties
3. Create a given date label, below this label create QDateEdit object to receive the new date and set their properties
4. Create a push button which when pressed date is calculated
5. Create result label to show the result i.e calculated ageBack-End implementation Steps :
1. Add action to the first QDateEdit when date is changed
2. Inside the first date edit action get the date of second date edit and set this date as maximum date of the first date edit
3. Add action to the second date edit when date is changed
4. Inside the second date edit action get the date of the first date edit and set this date as minimum date of the second date edit
5. Set different date edits such that first date should be less than second date
6. Add action to the push button
7. Inside the push button action, get the dates from both the date edits and calculate the difference and show the difference to the screen with the help of result label
Below is the implementation
# 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 ()) |
Output :