首页 > 解决方案 > 我如何才能正确地将这个等式与这个期末成绩计算器的 GUI 联系起来?

问题描述

我正在尝试使用 python 创建一个期末成绩计算器。我正在为 GUI 使用 Tkinter。我创建了一个方程式,用于计算您在期末考试后的成绩。 (期望等级 - (当前等级 * 1 - 等级权重)/等级权重

但是,当我在输入框中输入数字后单击以获取结果时,出现“浮点除以零”错误。任何帮助或建议将不胜感激!

注意:“成绩权重”是小数百分比,这就是我在GradeBox2上使用浮点数的原因

from tkinter import *

main = Tk()

# --- VARS ---
GradeBox1 = tkinter.IntVar()
GradeBox2 = tkinter.IntVar()
GradeBox3 = tkinter.IntVar()

# --- FUNCTION ---


def program():
    try:
        print(float(GradeBox3.get())) - (GradeBox1.get() * (1 - float(GradeBox2.get()))) / (float(
            GradeBox2.get()))

    except Exception as ex:
        print(ex)
        'error'

# --- MAIN ---


Label(main, text="Current Grade").grid(row=0)
Entry(main, textvariable=GradeBox1).grid(row=0, column=1)

Label(main, text='Weight of exam (Enter decimal then percentage ex: .30)').grid(row=2)
Entry(main, textvariable=GradeBox2).grid(row=2, column=1)

Label(main, text='Desired grade').grid(row=4)
Entry(main, textvariable=GradeBox3).grid(row=4, column=1)

mybutton = Button(main, text='Get your grade!', command=program).grid(row=6, column=0)

main.mainloop()

标签: pythontkinter

解决方案


看起来您希望GradeBox3' 的值介于 0 和 1 之间。如果是这样,问题是您将 an 传递IntVarEntry对象,导致您的输入值被转换为整数,因为将浮点数转换为 int 给出你传递的值的地板。在您的情况下,会将高于 0 和低于 1 的浮点值更改为 0,从而导致稍后除以零错误。您的 (float) 强制转换没有任何意义,因为此时的值已经为 0。使用DoubleVars 而不是IntVars 应该可以解决您的问题。


推荐阅读