我是Python的新手,我正在尝试使用tkinter创建一个简单的成绩计算器。 我使用循环创建了一些用户定义的入口箱 - 用于输入成绩。 但是,我不知道如何使这些输入框值的名称返回列表中的所有值或其他值。 (到目前为止,程序只返回在最后一个输入框中输入的最后一个值)。 我不确定要包含多少信息,所以我将简要介绍一下我正在尝试做的事情:
1使用循环创建用户
定义的X量的输入框2位用户输入成绩
3以及每个年级的百分比
4然后,我想访问每个等级,将其乘以百分比
然后得到总和。*到目前为止我写的内容不包括为百分比创建入口箱,因为我一直专注于尝试让我的程序返回所有成绩。
这是我认为可能存在问题的代码的一部分。
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)
我还在这里粘贴了整个代码:http://pastebin.com/xC92BKeb
另外,请原谅我在整个pastebin中留给自己的任何流浪笔记,我忘了把它们留下来。我很感激有关我做错了什么以及我应该做什么的任何信息和/或批评。
答案 0 :(得分:1)
在myClick
方法中,self.Mygrade
会被最后一个条目覆盖。
self.Mygrade= Entry(self.Frame2, width=10)
在getValues
中,只使用了一个值。
self.test1 = float(self.Mygrade.get())
您应该使用一些容器数据结构(如list
)来保留对Entry
个对象的引用,并使用该列表来计算平均值。
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))