NameError,名称未定义

时间:2020-02-26 22:04:31

标签: python tkinter

我在Entry中定义了一个def,然后在简单的数学函数中使用它。当我在Entry中键入数字时,它说未定义Entry的名称。

我对编程非常陌生,这是一个学校项目。在这个项目中,我正在尝试制作价值计算器。

marka1=float(marka.get())*1*3.79
NameError: name 'marka' is not defined

代码:

from  tkinter import*

prozor1=Tk()
prozor1.title('Python')
prozor1.geometry('500x500')
prozor1.config(bg= 'yellow')
natpis1=Label(prozor1, text='Konverter valuta')
natpis1.place(x=200, y=50)
natpis1.config(font=36)
natpis1.config(bg='silver')
natpis1.config(fg='black')
suma1=Entry(prozor1, width=19)
suma1.place(x=200,y=100)
mb=Menubutton(prozor1, text='Valuta')
mb.place(x=27, y=100)
mb.menu=Menu(mb)
mb.config(bg='grey')
mb['menu']=mb.menu

def km1():
    marka1=float(marka.get())*1*3.79
    rezu3=Label(prozor1, text='KN='+str(marka1))
    rezu3.place(x=200, y=170)
    rezu3.config(bg='silver')
def KM1():
    frk=Button(prozor1, text='Pretvori',width=15, command=km1)
    frk.place(x=200,y=130)
    frk.config(bg='silver')
    natpis1=Label(prozor1, text='Unesi sumu u KM')
    natpis1.place(x=90, y=100)
    natpis1.config(bg='silver')
    marka=Entry(prozor1, width=19)
    marka.place(x=200,y=100)

mb.menu.add_command(label='KM-KN', command=KM1)

这是项目的重要组成部分。

2 个答案:

答案 0 :(得分:1)

在您的情况下,marka需要传递到函数中。为此,您需要在代码的前面创建变量。这是对我有用的东西:

def km1(marka):
    marka1=float(marka.get())*1*3.79
    rezu3=Label(prozor1, text='KN='+str(marka1))
    rezu3.place(x=200, y=170)
    rezu3.config(bg='silver')
def KM1():
    marka=Entry(prozor1, width=19)
    marka.place(x=200,y=100)
    frk=Button(prozor1, text='Pretvori',width=15, command=lambda: km1(marka))
    frk.place(x=200,y=130)
    frk.config(bg='silver')
    natpis1=Label(prozor1, text='Unesi sumu u KM')
    natpis1.place(x=90, y=100)
    natpis1.config(bg='silver')

(此外,这确实带来了表单验证this might help的另一个问题)

答案 1 :(得分:0)

在python中,有一些叫做local and global的变量。您在函数内定义marka,因此其余代码看不到它。在def KM1的开头,您需要插入如下一行:

def KM1:
    global marka
    […]

使变量变为全局变量,整个代码都可以看到