Python 使用for循环创建一定数量的输入框,但只能。从最后一个输入框获取最后一个值

Python 使用for循环创建一定数量的输入框,但只能。从最后一个输入框获取最后一个值,python,list,loops,tkinter,python-3.3,Python,List,Loops,Tkinter,Python 3.3,我是Python新手,我正在尝试用tkinter创建一个简单的成绩计算器。 我使用一个循环创建了许多用户定义的入口框——用于输入分数。 但是,我不知道如何使这些entrybox值的名称返回列表中的所有值。(到目前为止,程序仅返回在最后一个entrybox中输入的最后一个值)。 我不确定要包含多少信息,因此我将简要介绍我正在尝试做的事情: 1使用循环创建用户定义的X数量的输入框 2用户输入等级 3以及每个等级的百分比价值 4然后我想访问每个等级,将其乘以百分比 5然后算出总数 *到目前为止,我所写

我是Python新手,我正在尝试用tkinter创建一个简单的成绩计算器。 我使用一个循环创建了许多用户定义的入口框——用于输入分数。 但是,我不知道如何使这些entrybox值的名称返回列表中的所有值。(到目前为止,程序仅返回在最后一个entrybox中输入的最后一个值)。 我不确定要包含多少信息,因此我将简要介绍我正在尝试做的事情:

1使用循环创建用户定义的X数量的输入框

2用户输入等级

3以及每个等级的百分比价值

4然后我想访问每个等级,将其乘以百分比

5然后算出总数

*到目前为止,我所写的内容并不包括为百分比创建入口框,因为我一直专注于让我的程序返回所有分数

这是我认为可能存在问题的代码的一部分

    self.abutton=tkinter.Button(self.Frame3,text="Average",command=self.getValues)
    self.abutton.pack(side='right')



def myClick(self):      
    self.x=self.myvalue.get()
    self.value=int(self.x)
    for n in range(self.value):
            self.Mylabel=Label(self.Frame2,text="Grade"+str(n+1)).place(x=10,y=30+(30*n))         
            self.Mygrade= Entry(self.Frame2, width=10)
            self.Mygrade.place(x=70,y=30+(30*n))







def getValues(self):
    self.test1 = ()
    nsum=0
    try:
        self.test1 = float(self.Mygrade.get())
    except ValueError:
        print("Error")
    else:
        print(self.test1)
我还将整个代码粘贴到这里:

另外,请原谅我在整个垃圾箱里给自己留的任何零散的便条,我忘了把它们忘在外面


如果您能提供任何有关我做错了什么和应该做什么的信息和/或批评,我将不胜感激。

myClick
方法中,
self.Mygrade
将被最后一个条目覆盖

self.Mygrade= Entry(self.Frame2, width=10)
getValues
中,只使用一个值

self.test1 = float(self.Mygrade.get())
您应该使用一些容器数据结构(如
列表
)来保留对
条目
对象的引用,并使用该列表来计算平均值


def myClick(self):
x=self.myvalue.get()
值=int(x)

self.grades=[]忘了包括,我使用的是Python v3.3,这里有一个(温和的)批评:不要使用place。如果您使用grid和/或pack,您的GUI将更易于编写和维护,并且在调整大小或以不同分辨率或不同字体运行时,将具有更好的行为。非常感谢你!我仍然很难理解这个问题,但我只是尝试了你的代码,我很高兴我有工作代码与我的代码进行比较,我希望能够理解我在这方面的错误。非常感谢!
def myClick(self):      
    x = self.myvalue.get()
    value = int(x)
    self.grades = [] # <---- to hold grade Entry objects.
    for n in range(self.value):
        Label(self.Frame2,text="Grade"+str(n+1)).place(x=10,y=30+(30*n))        
        grade = Entry(self.Frame2, width=10)
        grade.place(x=70,y=30+(30*n))
        self.grades.append(grade) # <---

def getValues(self):
    total = 0
    for grade in self.grades: # <--- iterate over entry objects.
        try:
            total += float(grade.get())
        except ValueError:
            print('Invalid value for grade: {}'.format(grade.get()))
    avg = total / len(self.grades)
    print('Average = {}'.format(avg))