在赋值2之前引用的局部变量

时间:2015-02-21 02:13:45

标签: python tkinter

我是Python初学者尝试使用tkinter库。我正在尝试创建两个文本框:一个会要求小时,另一个会按小时费率。这些值将成倍增加。如果每小时费率超过40,则将40以上的小时乘以1.5以反映加班费率。我收到一个错误:

UnboundLocalError: local variable 'salary' referenced before assignment

我不确定这是否是我代码中的唯一错误。如何解决此错误?

from tkinter import  *
from tkinter  import ttk

def main():
    value = float(hours.get())
    value2=float(rate.get())
    salary.set(value * value2)
    if hours > 40 : 
        salary = (((hours - 40)* 1.5 ) + 40 )* rate 
    else : 
        salary = hours * rate 
    return salary 

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

hours = StringVar()
rate = StringVar()
salary = StringVar()


entry = Entry(root, textvariable=hours)
entry2 = Entry(root, textvariable=rate)
label1=Label(root,textvariable=salary)
label2=Label(root, text='Enter Your Hours Worked: ')
button1=Button(root,text='Calculate Salary',command=main)


entry.pack()
entry2.pack()
label1.pack()
button1.pack()
label2.pack()


root.mainloop()

1 个答案:

答案 0 :(得分:0)

在本地范围内使用之前,您不会分配薪水:

 salary.set(value * value2) # <- not defined

您在if语句 中设置了它之后,您已经尝试使用它,您正在隐藏本地范围内的salary = StringVar()

 if hours > 40 :
        salary = (((hours - 40)* 1.5 ) + 40 )* rate # shadows the global salary
    else :
        salary = hours * rate
    return salary

我认为你想要更喜欢的东西,它不会导致错误并正确更新标签,你正在尝试比较StringVar&and 39s和ints:

def main():
    value = float(hours.get())
    value2 = float(rate.get())
    if value > 40 : # compare to .get float not StringVar
        val= (((value - 40)* 1.5 ) + 40 )* value2
    else :
        val = value * value2
    salary.set(val) # set after to whatever val is
    return val