0

I am trying to write a program using a tkinter GUI to calculate a few things. My get() function isn't working and I'm not sure why

from tkinter import *
from math import *
root = Tk()

v = 0
l = 0
w = 0
t1 = 0
t0 = 0

label1 = Label(root, text = "Enter value for length (mm) :").grid(columnspan = 2, sticky = "E")
length = Entry(root).grid(row = 0, column = 2)

label2 = Label(root, text = "Enter value for volume (mm^2) :").grid(columnspan = 2, sticky = "E")
volume = Entry(root).grid(row = 1, column = 2)

label3 = Label(root, text = "Enter value for the thickness of the cylinder (mm) :").grid(columnspan = 2, sticky = "E")
thickness = Entry(root).grid(row = 2, column = 2)

label4 = Label(root, text = "Enter value for starting temperature (K) :").grid(columnspan = 2, sticky = "E")
st_T = Entry(root).grid(row = 3, column = 2)

label5 = Label(root, text = "Enter value for finishing temperature (K) :").grid(columnspan = 2, sticky = "E")
end_T = Entry(root).grid(row = 4, column = 2)

def save():
    v = volume.get()
    l = length.get()
    w = thickness.get()
    t0 = st_T.get()
    t1 = end_T.get()

    global values 
    values = [v, l, w, t1, t0]

answer = StringVar()
labelans = Label(root, textvariable = answer).grid(columnspan = 3,)
answer.set("Answer = ")

def area_circle():
    global answer
    answer =  v / l
    print(answer)

Button(root, text = "Submit", command = save()).grid(row = 6, column = 0)

root.mainloop()

Obviously there are variables i'm not using yet but im trying to get the first part right first.

For v the error displayed is: Message='NoneType' object has no attribute 'get'

2 Answers2

1

The Grid geometry manager puts the widgets in a 2-dimensional table. The master widget is split into a number of rows and columns, and each “cell” in the resulting table can hold a widget.

What is important Grid() is returning NoneValue

if you are doing like:

length = Entry(root).grid(row = 0, column = 2)

in your variable length you will have NoneValue

you should do it like :

length = Entry(root)
length.grid(row = 0, column = 2)

your code:

label1 = Label(root, text = "Enter value for length (mm) :")
label1.grid(columnspan = 2, sticky = "E")
length = Entry(root)
length.grid(row = 0, column = 2)

label2 = Label(root, text = "Enter value for volume (mm^2) :")
label2.grid(columnspan = 2, sticky = "E")
volume = Entry(root)
volume.grid(row = 1, column = 2)

label3 = Label(root, text = "Enter value for the thickness of the cylinder (mm) :")
label3.grid(columnspan = 2, sticky = "E")
thickness = Entry(root)
thickness.grid(row = 2, column = 2)

label4 = Label(root, text = "Enter value for starting temperature (K) :")
label4.grid(columnspan = 2, sticky = "E")
st_T = Entry(root)
st_T.grid(row = 3, column = 2)

label5 = Label(root, text = "Enter value for finishing temperature (K) :")
label5.grid(columnspan = 2, sticky = "E")
end_T = Entry(root)
end_T.grid(row = 4, column = 2)

def save():
    v = volume.get()
    l = length.get()
    w = thickness.get()
    t0 = st_T.get()
    t1 = end_T.get()

    global values
    values = [v, l, w, t1, t0]

answer = StringVar()
labelans = Label(root, textvariable = answer).grid(columnspan = 3,)
answer.set("Answer = ")

def area_circle():
    global answer
    answer =  v / l
    print(answer)

Button(root, text = "Submit", command = save()).grid(row = 6, column = 0)

root.mainloop()

output:

enter image description here

ncica
  • 7,015
  • 1
  • 15
  • 37
0

The command argument should be a callback, not the actual call:

Button(root, text="Submit", command=save).grid(row=6, column=0)
ipaleka
  • 3,745
  • 2
  • 13
  • 33