名称错误,未定义名称

2024-09-27 20:18:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我在def中定义了一个Entry,然后在简单的数学函数中使用它。当我在Entry中键入数字时,它表示名称(of 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)

这是该项目的一个重要部分


Tags: textconfigsilverdefplacembwidthlabel
2条回答

在您的情况下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

在python中有一种叫做local and global变量的东西。您在函数中定义了marka,因此代码的其余部分无法看到它。在def KM1的开头,需要插入一行,如下所示:

def KM1:
    global marka
    […]

使变量成为全局变量,并且您的整个代码都可以看到它

相关问题 更多 >

    热门问题