2016-06-13 12 views
-1

私は非常にPythonには新しく、最終試験で必要なスコアを計算するtkinterを使用してGUIを作成しようとしています。これは私がこれまで持っているものです。NameError:name 's2gradefloat'が定義されていません

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 

私はおそらくここで多くのミスを作ってるんだ実現しています。誰も助けることができますか?あなたの計算機能で

+0

コードがさえ 's2gradefloat'を持っていません。 's2grade = float(s2gradef.get())'という行は、 's2gradef'を辞書にアクセスしようとしている' crscore'の中にありますが、これを宣言したことはありません。だからあなたはそれを修正したいかもしれません。 – idjaw

+0

@ idjaw私はプログラミングに本当に新しいので、これをどうやってできるかの例を私に見せてくれると思いますか? –

+0

's2gradef'とは何ですか?あなたはそれを使って何かをしようとしているので、そこに何らかの種類のデータがあると考える必要があります。 's2gradef'には何が必要ですか? – idjaw

答えて

0

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

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

s2gradefloat is not defined --- 

は基本的に、あなたは私がasumingていますあなたの入力ボックスから値を取得しようとしていますか?

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 
+0

ええ、私はこの方程式で使うことができるように、入力ボックスに入力された数字を浮動小数点に変換しようとしています:rscore =(100 * 50)* s2grade)/ 50 –

+0

s2grade、idkの代わりに計算関数内に新しい変数名を使用し、 'e'とdiを削除するs2grad = float(s2grade.get()) – glls

+0

ローカル変数のrscore変数 – glls

関連する問題