Objet Button non appelable dans le code tkinter

Oct 27 2020
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()

Ceci est mon code tkinter, je créais une calculatrice en Python et je suis tombé sur cette erreur, si j'ai cliqué sur un bouton

button_8 = Button (root, text = "8", padx = 40, pady = 20, command = lambda: button_add (8)) TypeError: l'objet 'Button' n'est pas appelable

S'il vous plaît, quelqu'un aide comment dois-je résoudre ce problème?

Réponses

2 CoolCloud Oct 27 2020 at 12:14

Regardez de plus près et vous remarquerez que votre fonction et la variable de bouton d'ajout ont le même nom, et par conséquent, python ne sait pas lequel appeler, alors changez simplement le nom de la fonction ou le nom du bouton.

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

De plus, je sais que le code est toujours incomplet, mais gardez cela à l'esprit, chaque fois que vous cliquez sur le bouton numérique, le numéro sera affiché vers le début du widget d'entrée, pour vous en débarrasser, dites:

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

Je le dis maintenant, car je pense que la prochaine étape que vous allez faire pour éviter cela est:

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

Ce n'est pas du tout nécessaire puisque vous avez une ENDvariable intégrée avec tkinter.