0

Hi,
i have just started programming with python and i have beken given a task where i must create a python calculator.
So far i have created the code (seen below) however i need help explaining it-e.g. saying what each part of the code does:

from tkinter import *

root = Tk()
root.title("Python Calculator")

button_layout_Design = [
"1","2","3","+",
"4","5","6","-",
"7","8","9","*",
"C","0","=","/"
]

r = 1
c = 0
for buttons in button_layout_Design:
    cmd = lambda key=buttons: onClick(key)
    Button(root,text=buttons,relief="flat",command=cmd).grid(row=r,column=c)
    c += 1
    if c > 3:
        r += 1
        c = 0
view = Entry(root)
view.grid(row=0,column=0,columnspan=4)

def onClick(key):
    if key == "C":
        view.delete(0,END)
    elif key == "=":
        try:
            ans = eval(view.get())
            view.delete(0,END)
            view.insert(0,ans)
        except SyntaxError:
            view.delete(0,END)
            view.insert(0,"Syntax Error")
        except ZeroDivisionError:
            view.delete(0,END)
            view.insert(0,"You cann't divide by zero!")
    else:
        view.insert(END,key)

Any help would be much appreciated!

Edited by Fighter01

2
Contributors
5
Replies
55
Views
2 Years
Discussion Span
Last Post by Fighter01
Featured Replies
  • 1

    I have python2 so I changed tkinter to Tkinter. I am not a big tkinter expert. Firstly the code does not work. root.mainloop() or similar is missing. If I put it in, it works. Secondly. If you have created the code, then there was something on your mind, or not? … Read More

  • 1

    * We create a list of one character strings, which are the button labels and numbers or operations at the same time. line 6-11 * We start a loop on button label elements. We interpret an index of a button label element as a row, column index. row= index//4+1 column=index%4 … Read More

1

I have python2 so I changed tkinter to Tkinter. I am not a big tkinter expert.

Firstly the code does not work. root.mainloop() or similar is missing. If I put it in, it works.

Secondly. If you have created the code, then there was something on your mind, or not?

Thirdly: I tried to do what I understand you want.

* We create a list of one character strings, which are the button labels and numbers or operations at the same time. 
* We start a loop on button label elements. We interpret an index of a button label element as a row, column index. row= index//4+1 column=index%4
* In this loop for each element **begin**
* We create a button, with the following attributes 
    * the actual label element as text 
    * a function call with the actual label element as a parameter (function not explained here)
    * we set the button's grid, to place the button to row and column
* In this loop for each element **end**
* We create an entry widget  on the first (0th) row and make it span 4 column.

Edited by pyTony: cancelled unsuccessful edit

0

Hi Slate,
Thanks for your help. I enjoy programming however i find writing everything down, as in what every line of code does in way that people understand, quite difficult!

0

Also, what part of my code does each of the lines which you have written relate to?
Thanks again for all your help - it is much appreciated!

1
* We create a list of one character strings, which are the button labels and numbers or operations at the same time. 
line 6-11
* We start a loop on button label elements. We interpret an index of a button label element as a row, column index. row= index//4+1 column=index%4
line 13-15, line 19-21, 
* In this loop for each element **begin**
* We create a button, with the following attributes 
    * the actual label element as text 
line 17 text=buttons
    * a function call with the actual label element as a parameter (function not explained here)
line 16 and line 17 'command=cmd '
    * we set the button's grid, to place the button to row and column
line 17 '.grid(row=r, column=c)'
* In this loop for each element **end**
* We create an entry widget  on the first (0th) row and make it span 4 column.
line 22-23
This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.