A calculator is used to do mathematical calculations. All modern day gadgets have a calculator.You must have created a simple Python code to implement the basic Arithmetic operations in text form. In this post we will discuss how to create a Simple Calculator in Python with GUI. The GUI is created with Graphics functions available in graphics.py module.
The common calculator applications available can be switched between basic, binary and scientific. But the code we are doing here is very basic. You can copy it, extend it and use it. You can share the extended code with us.
So, let’s begin and use Python Graphics methods (from graphics.py) that we understood in previous posts. Let’s create a small and basic but amazingly exciting graphics program in Python.
Step-1 Interface of a Simple Calculator in Python
The first step in creating a Simple Calculator in Python with GUI is designing its interface. The interface we created has these capabilities-
- Input the digits by pressing number buttons and display in result Text object
- Choose operation (add/ multiply/ subtract/ divide) with operator buttons and display in result Text object
- Equal to (=) button to evaluate the expression and display the result
- Clear button ‘C’ to clear the current contents of Text object
The interface of this application is created in this way-
- GraphWin class constructor is called to create a window object
- A Text object is created to store which buttons and operators clicked
- Rectangles objects are created to display the number and operator in form of buttons.
- A Rectangle object to create clear button to erase contents of the text object.
Step-2 Coding the Operations
The second step is to add the functionality. While creating each button on the window, its top left corner coordinates and bottom right corners coordinates are stored are stored in two arrays(art and arrf).
When a user clicks coordinates of that point is read by using getMouse function. it is compared with the point coordinates stored in the two arrays. It is done to determine which button user has clicked. Using this the value is stored in a string and displayed in result Text object.
When the user clicks the “=” button rectangle, the string made with operators and numbers is evaluated. For evaluation Python eval function is called by passing the string as parameter. Its result is drawn in the result Text Object using draw method
Here is the complete source code for Simple Calculator in Python with GUI. Copy it, run it and see how it works!!
# A simple graphical Calculator Application in Python import time from graphics import * def main(): workArea = GraphWin('A Simple Python timer', 250, 350) # give title and dimensions workArea.setBackground('blue') calexp=Rectangle(Point(50,10),Point(190,40)) calexp.setFill("yellow") calexp.draw(workArea) arrf=[] arrt=[] x=50 y=50 i=0 j=9 #loop to create number buttons while j>=0: arrf.append(Point(x,y)) arrt.append(Point(x+50,y+50)) btn=Rectangle(Point(x,y),Point(x+50,y+50)) btn.setFill('white') btn.draw(workArea) num = Text(Point(x+25,y+25),str(j)) num.setFace('helvetica')#change text style num.setStyle('bold italic') num.setTextColor("blue") #change text color num.draw(workArea) x=x+55 j=j-1 i=i+1 if (i==3): x=50 y=y+55 i=0 ops=['+','-','*','/','='] j=0 #loop to create operator buttons while j<len(ops): arrf.append(Point(x,y)) arrt.append(Point(x+50,y+50)) btn=Rectangle(Point(x,y),Point(x+50,y+50)) btn.setFill('white') btn.draw(workArea) num = Text(Point(x+25,y+25),str(ops[j])) num.setFace('helvetica')#change text style num.setStyle('bold italic') num.setSize(24) num.setTextColor("red") #change text color num.draw(workArea) x=x+55 j=j+1 i=i+1 if (i==3): x=50 y=y+55 i=0 #reate Clear button btn=Rectangle(Point(192,10),Point(222,40)) btn.setFill('green') btn.draw(workArea) arrf.append(Point(192,10)) arrt.append(Point(222,40)) num = Text(Point(192+15,10+15),'C') num.setFace('helvetica')#change text style num.setStyle('bold italic') num.setTextColor("white") #change text color num.draw(workArea) numv="" clk=True #loop to check the range of coortinates where user clicked while clk: ch=workArea.getMouse() if (ch.x >arrf[0].x and ch.x <arrt[0].x and ch.y >arrf[0].y and ch.y<arrt[0].y): numv=numv+"9" if (ch.x >arrf[1].x and ch.x <arrt[1].x and ch.y >arrf[1].y and ch.y<arrt[1].y): numv=numv+"8" if (ch.x >arrf[2].x and ch.x <arrt[2].x and ch.y >arrf[2].y and ch.y<arrt[2].y): numv=numv+"7" if (ch.x >arrf[3].x and ch.x <arrt[3].x and ch.y >arrf[3].y and ch.y<arrt[3].y): numv=numv+"6" if (ch.x >arrf[4].x and ch.x <arrt[4].x and ch.y >arrf[4].y and ch.y<arrt[4].y): numv=numv+"5" if (ch.x >arrf[5].x and ch.x <arrt[5].x and ch.y >arrf[5].y and ch.y<arrt[5].y): numv=numv+"4" if (ch.x >arrf[6].x and ch.x <arrt[6].x and ch.y >arrf[6].y and ch.y<arrt[6].y): numv=numv+"3" if (ch.x >arrf[7].x and ch.x <arrt[7].x and ch.y >arrf[7].y and ch.y<arrt[7].y): numv=numv+"2" if (ch.x >arrf[8].x and ch.x <arrt[8].x and ch.y >arrf[8].y and ch.y<arrt[8].y): numv=numv+"1" if (ch.x >arrf[9].x and ch.x <arrt[9].x and ch.y >arrf[9].y and ch.y<arrt[9].y): numv=numv+"0" if (ch.x >arrf[10].x and ch.x <arrt[10].x and ch.y >arrf[10].y and ch.y<arrt[10].y): numv=numv+"+" if (ch.x >arrf[11].x and ch.x <arrt[11].x and ch.y >arrf[11].y and ch.y<arrt[11].y): numv=numv+"-" if (ch.x >arrf[12].x and ch.x <arrt[12].x and ch.y >arrf[12].y and ch.y<arrt[12].y): numv=numv+"*" if (ch.x >arrf[13].x and ch.x <arrt[13].x and ch.y >arrf[13].y and ch.y<arrt[13].y): numv=numv+"/" if (ch.x >arrf[14].x and ch.x <arrt[14].x and ch.y >arrf[14].y and ch.y<arrt[14].y): #Evaluate and display expression num.undraw() num = Text(Point(150-len(str(numv)),25),str(eval(numv))) num.draw(workArea) numv=str(eval(numv)) continue if (ch.x >arrf[15].x and ch.x <arrt[15].x and ch.y >arrf[15].y and ch.y<arrt[15].y): numv=" " if (ch.x >249): break calexp=Rectangle(Point(50,10),Point(190,40)) calexp.setFill("yellow") calexp.draw(workArea) num = Text(Point(150-len(str(numv)),25),str(numv)) num.draw(workArea) main()
Be First to Comment