NameError: name 's2gradefloat' is not defined

NameError: name 's2gradefloat' is not defined

我是 python 的新手,我正在尝试使用 tkinter 创建一个 GUI 来计算您在期末考试中获得特定成绩所需的分数。这是我目前所拥有的:

from tkinter import *

root = Tk()
root.geometry("600x550+300+50")
root.title("")
backgroundcolor = '#%02x%02x%02x' %(0,0,0)
root.config(background= backgroundcolor)
#------------------Calculation----------------------#
def crscore():
    s2grade = float(s2gradef.get())
    dgrade = float(dgradef.get())
    rscore = (100*dgrade - (100 - 50)* s2grade ) / 50
    rscorelabel=Label(root,text="Required Test Score: %s" %rscore).place(x=250,y=370)
    return
#------------------Labels----------------------#
Label1=Label(root,
text='Final Exam Calclulator',
fg='white',
bg='black',
font= "a 17 bold").place(x=170,y=20)
Label3=Label(root,
text='Enter Current Semester 2 Grade',
fg='white',
bg='black',
font= "a 12 bold").place(x=100,y=100)

Label4=Label(root,
text='Enter Desired Final Grade',
fg='white',
bg='black',
font= "a 12 bold").place(x=100,y=165)
#------------------EntryBoxes----------------------#
s2grade = StringVar()
dgrade = StringVar()
s2grade = Entry(root,textvariable=s2grade).place(x=395,y=100)
dgrade = Entry(root,textvariable=dgrade).place(x=360,y=165)
#------------------Button----------------------#
button1=Button(root,text='Calculate Required Score',command=crscore).place(x=250,y=240)
root.mainloop()

但不断出现错误:

Traceback (most recent call last):
  File "C:\Python34\lib\tkinter\__init__.py", line 1538, in __call__
    return self.func(*args)
  File "E:/FinalProject.py", line 10, in crscore
    s2grade = float(s2gradefloat.get())
NameError: name 's2gradefloat' is not defined

我意识到我可能在这里犯了很多错误。有人可以帮忙吗?

在你的计算函数中:

#------------------Calculation----------------------#

def crscore():
    s2grade = float(s2gradef.get())
    dgrade = float(dgradef.get())

s2gradefloat is not defined --- 

基本上,您是想从我假设的输入框中获取值吗?

s2grade = Entry(root,textvariable=s2grade).place(x=395,y=100)

所以你应该使用 s2grade.get()

但话又说回来——这会导致另一个错误——你的变量在赋值前被引用。

另一个快速说明:

你在本地重复使用变量名,在你的计算函数内部和外部,这不是一个好的做法

s2grade = StringVar()
dgrade = StringVar()
s2grade = Entry(root,textvariable=s2grade).place(x=395,y=100)
dgrade = Entry(root,textvariable=dgrade).place(x=360,y=165)

def crscore():
    s2grade = float(s2gradef.get())
    dgrade = float(dgradef.get())
    rscore = (100*dgrade - (100 - 50)* s2grade ) / 50
    rscorelabel=Label(root,text="Required Test Score: %s" %rscore).place(x=250,y=370)
    return

尽量保持变量的唯一性,这样可以省去很多麻烦。

例如:

#------------------Calculation----------------------#

def crscore():
    s2grad = float(s2grade.get())
    dgrad = float(dgrade.get())
    print(s2grad)
    print(dgrad)
    rscore = (100*dgrad - (100 - 50)* s2grad ) / 50
    rscorelabel=Label(root,text="Required Test Score: %s" %rscore).place(x=250,y=370)
    return
#------------------EntryBoxes----------------------#
s2grade = StringVar()
dgrade = StringVar()
Entry(root, textvariable=s2grade).place(x=395, y=100)
Entry(root, textvariable=dgrade).place(x=360, y=165)
#removed assigned variable names to the Entry widgets, as they are not being
#used " There's no point in assigning variables to 
#Entry(...).place(...) always returns None" as mentioned by @Brian Oakley