【问题标题】:Local variable referenced before assignment 2赋值 2 之前引用的局部变量
【发布时间】:2015-04-22 20:36:52
【问题描述】:

我是一名尝试 tkinter 库的 Python 初学者。我正在尝试创建两个文本框:一个会询问小时数,另一个会询问小时费率。这些值将相乘。如果小时费率超过 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()

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

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

     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 的和和整数:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      • 2013-08-02
      • 2011-11-06
      • 2018-01-12
      相关资源
      最近更新 更多