首页 > 解决方案 > Tkinter get() 函数没有返回任何内容

问题描述

我正在尝试使用 tkinter GUI 编写一个程序来计算一些东西。我的 get() 函数不起作用,我不知道为什么

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()

显然有一些变量我还没有使用,但我试图首先让第一部分正确。

对于 v,显示的错误是:Message='NoneType' object has no attribute 'get'

标签: pythontkinter

解决方案


网格几何管理器将小部件放在二维表中。主小部件分为许多行和列,结果表中的每个“单元格”都可以容纳一个小部件。

重要的是 Grid() 返回 NoneValue

如果你这样做:

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

在您的可变长度中,您将拥有 NoneValue

你应该这样做:

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

你的代码:

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()

输出:

在此处输入图像描述


推荐阅读