-1

I can't figure out why this won't work. I am trying to put text in a textbox but it is not inserting.

The Code:

from tkinter import *

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

c = Entry(root, width=25, borderwidth=5, font=('Helvetica 18 bold'), bg="#E8E8E8").grid(row=0, column=0, columnspan=8, padx=10, pady=10)

def button_click(num):
    c.insert(end, (num))

button_7 = Button(root, text=7, padx=40, pady=20, bg="#C7C7C7", font=('Helvetica 18 bold'), command=lambda: button_click(num=7)).grid(column=1, row=1)
button_8 = Button(root, text=8, padx=40, pady=20, bg="#C7C7C7", font=('Helvetica 18 bold'), command=lambda: button_click(num=8)).grid(column=2, row=1)
button_9 = Button(root, text=9, padx=40, pady=20, bg="#C7C7C7", font=('Helvetica 18 bold'), command=lambda: button_click(num=9)).grid(column=3, row=1)

button_4 = Button(root, text=4, padx=40, pady=20, bg="#C7C7C7", font=('Helvetica 18 bold'), command=lambda: button_click(num=4)).grid(column=1, row=2)
button_5 = Button(root, text=5, padx=40, pady=20, bg="#C7C7C7", font=('Helvetica 18 bold'), command=lambda: button_click(num=5)).grid(column=2, row=2)
button_6 = Button(root, text=6, padx=40, pady=20, bg="#C7C7C7", font=('Helvetica 18 bold'), command=lambda: button_click(num=6)).grid(column=3, row=2)

button_1 = Button(root, text=1, padx=40, pady=20, bg="#C7C7C7", font=('Helvetica 18 bold'), command=lambda: button_click(num=1)).grid(column=1, row=3)
button_2 = Button(root, text=2, padx=40, pady=20, bg="#C7C7C7", font=('Helvetica 18 bold'), command=lambda: button_click(num=2)).grid(column=2, row=3)
button_3 = Button(root, text=3, padx=40, pady=20, bg="#C7C7C7", font=('Helvetica 18 bold'), command=lambda: button_click(num=3)).grid(column=3, row=3)

button_0 = Button(root, text=0, padx=40, pady=20, bg="#C7C7C7", font=('Helvetica 18 bold'), command=lambda: button_click(num=0)).grid(column=1, row=4)

button_add = Button(root, text='+', padx=40, pady=20, bg="#C7C7C7", font=('Helvetica 18 bold'), command=lambda: button_click()).grid(column=1, row=5)
button_clear = Button(root, text='clear', padx=78, pady=20, bg="#C7C7C7", font=('Helvetica 18 bold'), command=lambda: button_click()).grid(column=2, row=4, columnspan=3)
button_equals = Button(root, text='=', padx=98, pady=20, bg="#C7C7C7", font=('Helvetica 18 bold'), command=lambda: button_click()).grid(column=2, row=5, columnspan=4)

Here is the Error message:

File "C:\Users\Work\Desktop\Projects\Tkinker test V 0.1.py", line 10, in button_click
    c.insert(end, (num))
AttributeError: 'NoneType' object has no attribute 'insert'

The message comes up when I hit a button to put a number on the textbox

Sociopath
  • 13,068
  • 19
  • 47
  • 75
  • 2
    Presumably `Entry.grid` returns `None`. Have you tried doing `c = Entry(...)` and `c.grid(...)` in two separate lines? – Green Cloak Guy Jan 26 '21 at 17:52
  • Please have a look at https://stackoverflow.com/help/how-to-ask and add the one missing line `root.mainloop()` to make this a self contained demo code. – Michal T Jan 26 '21 at 18:33

1 Answers1

1

c is equal to the return value of grid() not the return value of Entry(). You therefore never saved a reference to the entry box itself.

You should split the calls of creation and layout as such:

c = Entry(root, width=25, borderwidth=5, font=('Helvetica 18 bold'), bg="#E8E8E8")
c.grid(row=0, column=0, columnspan=8, padx=10, pady=10)

Aaron
  • 10,133
  • 1
  • 24
  • 40