我想写一个程序来计算一个班级的成绩。我构建它的方式是,用户可以添加考试、项目、实验室或任何东西,并且每个都有一定的权重。现在我只是想让它只在考试时起作用。问题是,我的最终成绩被固定在0,因为它记录的成绩作为默认值,零。我怎样才能让它记录新的值,或者更好,有没有一种方法可以只取tkinter中某一列的值?你知道吗
def ShowFinalGrade(self):
Label(self, text= "Final Grade").grid(row=10, column=0, columnspan=3)
Label(self, text= self.Calculate()).grid(row=10, column=4)
finalpercent=87
fp = finalpercent
grading_scale = self.CreateGradeScale()
self.class_score = Button(self, text="Calculate Grade", command=self.Calculate)
self.class_score.grid(row=10, column=5, padx=50)
if fp>= grading_scale[0]:
self.finalgrade= "A"
elif fp>= grading_scale[1]:
self.finalgrade= "A-"
elif fp>= grading_scale[2]:
self.finalgrade= "B+"
elif fp>= grading_scale[3]:
self.finalgrade= "B"
elif fp>= grading_scale[4]:
self.finalgrade= "B-"
elif fp>= grading_scale[5]:
self.finalgrade= "C+"
elif fp>= grading_scale[6]:
self.finalgrade= "C"
elif fp>= grading_scale[7]:
self.finalgrade= "C-"
elif fp>= grading_scale[8]:
self.finalgrade= "D+"
elif fp>= grading_scale[9]:
self.finalgrade= "D"
else:
self.finalgrade= "F"
Label(self, text = self.finalgrade).grid(row=10, column=3, columnspan=3)
def AddExam(self):
examnumber = self.examnumber
examname = Entry(self)
examname.grid(row=examnumber+1, column=0)
examname.insert(0, "Exam "+str(examnumber))
examgrade = Entry(self)
examgrade.grid(row=examnumber+1, column=1)
examgrade.insert(0,0)
# self.examtotal += float(examgrade.get())
self.examscores.append(float(examgrade.get()))
print(examgrade) # Troubleshooting
self.examnumber+=1
def Calculate(self):
examsum = 0
if len(self.examscores)!=0:
for i in range(len(self.examscores)):
examsum+= self.examscores[i]
examavg = examsum / len(self.examscores)
else:
examavg = 0
return examavg
将标签设置为文本时=自我计算(),Python仅在该点执行函数Calculate,并将其返回的结果用作标签文本。你知道吗
如果希望tkinter在每次执行新计算时自动更新标签,那么最干净的方法是使用StringVar:
然后在计算中,而不是
做
我还可以提出一种更为Python的方法来将标记fp映射到一个等级——您的方法虽然有效,但没有使用Python习惯用法。例如,您可以尝试:
或者,如果您希望将评分量表与成绩分开(因为它可能因考试而异),您可以尝试:
然后将放坡比例作为实例变量或参数提供:
相关问题 更多 >
编程相关推荐