1
from tkinter import * 
root=Tk()
#  not required here root.geometry()
root.title("calculator")
entry=Entry(root,width=50,borderwidth=5)
entry.grid(row=0,column=0,columnspan=3,padx=10,pady=10)
def button_add(number): 
    entry.insert(0,number)
def clear(): 
    entry.delete(0,END)
button_1=Button(root,text="1",padx=40,pady=20,command=lambda: button_add(1))
button_2=Button(root,text="2",padx=40,pady=20,command=lambda: button_add(2))
button_3=Button(root,text="3",padx=40,pady=20,command=lambda: button_add(3))
button_4=Button(root,text="4",padx=40,pady=20,command=lambda: button_add(4))
button_5=Button(root,text="5",padx=40,pady=20,command=lambda: button_add(5))
button_6=Button(root,text="6",padx=40,pady=20,command=lambda: button_add(6))
button_7=Button(root,text="7",padx=40,pady=20,command=lambda: button_add(7))
button_8=Button(root,text="8",padx=40,pady=20,command=lambda: button_add(8))
button_9=Button(root,text="9",padx=40,pady=20,command=lambda: button_add(9))
button_0=Button(root,text="0",padx=40,pady=20,command=lambda: button_add(0))
button_add=Button(root,text='+',padx=39,pady=20)
button_equal=Button(root,text='=',padx=95,pady=20)
def clear(): 
    entry.delete(0,END)
button_clear=Button(root,text='clear',padx=141.5,pady=10,command=clear)
# grid being set 
button_1.grid(row=1,column=0)
button_2.grid(row=1,column=1)
button_3.grid(row=1,column=2)
button_4.grid(row=2,column=0)
button_5.grid(row=2,column=1)
button_6.grid(row=2,column=2)
button_7.grid(row=3,column=0)
button_8.grid(row=3,column=1)
button_9.grid(row=3,column=2)
button_add.grid(row=4,column=0)
button_equal.grid(row=4,column=1,columnspan=2)
button_clear.grid(row=5, column=0,columnspan=4)

root.mainloop()

This is my tkinter code , i was creating a calculator in Python and I came across this error, if I clicked on any button

button_8=Button(root,text="8",padx=40,pady=20,command=lambda: button_add(8)) TypeError: 'Button' object is not callable

Please someone help how should I solve this ?

0

1 Answer 1

2

Take a closer look and you will notice that your function and add button variable have the same name, and hence python is confused which one to call, so just change, either the function name or the button name.

add_button = Button(root,text='+',padx=39,pady=20)
add_button.grid(row=4,column=0)

Also, I know the code is still incomplete but just keep this in mind, each time you click on the number button, the number will be shown towards the starting of the entry widget, to get rid of this, say:

def button_add(number): 
    entry.insert(END,number) #END will always add the number to the end, rather than 0th postion like before

Im telling this now, because I think the next step your going to do to avoid this is:

def button_add(number):
    e = entry.get()
    entry.delete(0,END)
    entry.insert(0,e+str(number))

This is not necessary at all since you have a built in END variable with tkinter.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.