In this article we will see how we can create a ratio calculator using PyQt5. Ratio is a contrast, which exists between two particular numbers, is defined as ratio. This ratio calculator is developed to compute this contrast and find out the relationship between these numbers. Below is how the calculator will look 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. Below is the command to install the PyQt5
pip install PyQt5
Concept : User has to select a ratio then enter another number for which calculator will find the corresponding ratio value, below is the formula used
A / B = C / X
Here A and B are the selected ratio and C is the entered number for which we have to find corresponding value of the ratio
GUI Implementation Steps : 1. Create a heading label that display the calculator name 2. Create three spin box for getting ‘A’, ‘B’ and ‘C’ values 3. Create labels between spin boxes for ratio and equal to symbol and label for showing ‘X’ value 4. Create push button for calculate the ratio value 5. Create a label to show the calculated value Back-End Implementation : 1. Set range to each of the spin box with minimum value equal to 1 so that user can’t enter 0 as input 2. Set various properties like alignment, geometry to each of the widget in the window 3. Add color effect to the push button 4. Add action to the push button when it get clicked 5. Inside the push button action calculate the value of ‘X’ according to the values entered by user 6. Remove decimal values if it is a whole number 7. Show the output with the help of result label
Below is the implementation
Python3
# 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("Python ") # width of window self .w_width = 550 # height of window self .w_height = 300 # 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("Ratio Calculator", self ) head.setWordWrap( True ) # setting geometry to the head head.setGeometry( 0 , 10 , 550 , 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 spin box self .a_spin = QSpinBox( self ) # setting geometry self .a_spin.setGeometry( 50 , 90 , 90 , 35 ) # setting alignment self .a_spin.setAlignment(Qt.AlignCenter) # setting range self .a_spin.setRange( 1 , 999999 ) # creating a label l1 = QLabel(" : ", self ) # setting geometry l1.setGeometry( 140 , 90 , 30 , 35 ) # setting alignment l1.setAlignment(Qt.AlignCenter) # creating a spin box self .b_spin = QSpinBox( self ) # setting geometry self .b_spin.setGeometry( 170 , 90 , 90 , 35 ) # setting alignment self .b_spin.setAlignment(Qt.AlignCenter) # setting range self .b_spin.setRange( 1 , 999999 ) # creating a label l2 = QLabel(" = ", self ) # setting geometry l2.setGeometry( 260 , 90 , 30 , 35 ) # setting alignment l2.setAlignment(Qt.AlignCenter) # creating a spin box self .c_spin = QSpinBox( self ) # setting geometry self .c_spin.setGeometry( 290 , 90 , 90 , 35 ) # setting alignment self .c_spin.setAlignment(Qt.AlignCenter) # setting range self .c_spin.setRange( 1 , 999999 ) # creating a label l3 = QLabel(" : ", self ) # setting geometry l3.setGeometry( 380 , 90 , 20 , 35 ) # setting alignment l3.setAlignment(Qt.AlignCenter) # creating a label lx = QLabel("X", self ) # setting geometry lx.setGeometry( 410 , 90 , 90 , 35 ) # setting alignment lx.setAlignment(Qt.AlignCenter) # setting style sheet lx.setStyleSheet("QLabel" "{" "border : 1px solid black;" "background - color : white;" "font - size : 15px ;" "}") # creating a push button calculate = QPushButton("Calculate", self ) # setting geometry to the push button calculate.setGeometry( 175 , 150 , 200 , 40 ) # adding action to the button calculate.clicked.connect( self .calculate) # adding color effect to the push button color = QGraphicsColorizeEffect() color.setColor(Qt.darkGreen) 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( 125 , 210 , 300 , 60 ) # 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 )) def calculate( self ): # getting spin box 'a' value a = self .a_spin.value() # getting spin box 'b' value b = self .b_spin.value() # getting spin box 'c value c = self .c_spin.value() # calculating 'x' value x = (c * b) / a # removing decimal if decimal is zero if x % 1 = = 0 : x = int (x) # setting text to the result label self .result.setText( str (a) + " : " + str (b) + " = " + str (c) + " : " + str (x)) # create pyqt5 app App = QApplication(sys.argv) # create the instance of our Window window = Window() # start the app sys.exit(App. exec ()) |
Output :