在Tkinter中设置错误处理循环

时间:2019-06-13 20:45:15

标签: python exception tkinter error-handling valueerror

我创建了一个tkinter程序来计算gpa,我剩下的唯一部分是错误处理部分,而我只是找不到写无限错误处理循环的方法。我正在尝试编写循环,所以当您给除(1,2,3,4,5,6,7,8)以外的其他类赋予不同的值时,程序将不会继续执行,直到您提供了多个类正确的值。

from tkinter import *
import math

master = Tk()

master.title('Gpa Calculator')  
master.geometry("400x400")
master.resizable(width=False, height=False)  #Makes the window size           fixed, so you can't make it bigger or smaller by hand.

def Print_Entry():
    global print_command
    global Entry_int

    Entry = n_of_classes_entry.get()
    Entry_int = int(Entry)

    Create_Classes()

#A function to destroy and recreate the program
def restart():
    classentries.clear()
    classintegers.clear()
    classintegers_gpa.clear()

    list = master.grid_slaves()
    for l in list:
        l.destroy()
        start_program()

textlist = ['First', 'Second', 'Third', 'Fourth', 'Fifth', 'Sixth',     'Seventh', 'Eight']
classentries = []
classintegers = []
classintegers_gpa = []

#Creates the entry, text, and entry boxes for the classes
def Create_Classes():

    for i in range (0, Entry_int): 
        classentries.append(Entry(master))

    for i in range (0, Entry_int):
        classentries[i].grid(row=1 + i, column=1)

    for i in range (0, Entry_int):
        Label(master, text=textlist[i] + ' grade:').grid(row=i + 1,   sticky=E)

    calculate_button = Button(master, bg="red", text="Calculate", command=Calculate).grid(row=9, column=1, sticky=W, pady=4)


def Calculate():
    for i in range (0, Entry_int):
        classintegers.append(round(float(classentries[i].get())))

        if classintegers[i] in range(0,50):
            classintegers[i] = 0

        if classintegers[i] in range(50,55):
            classintegers[i] = 1.0

        if classintegers[i] in range(55,60):
            classintegers[i] = 2.0

        if classintegers[i] in range(60,65):
            classintegers[i] = 2.3

        if classintegers[i] in range(65,70):
            classintegers[i] = 2.7

        if classintegers[i] in range(70,75):
            classintegers[i] = 3.0

        if classintegers[i] in range(75,80):
            classintegers[i] = 3.3

        if classintegers[i] in range(80,85):
            classintegers[i] = 3.7

        if classintegers[i] in range(85,110):
            classintegers[i] = 4.0

        classintegers_gpa.append(classintegers[i])

        last_calculate = True


    #  This while loop is for the program to print the   gpa_calculation once.
    if last_calculate == True:
        global gpa_calculation
        gpa_calculation =     round(sum(classintegers_gpa))/len(classintegers_gpa)
        gpa_rounded = float("{0:.2f}".format(gpa_calculation))
        printgpa = Label(master, text="Your Gpa is: " +     str(gpa_rounded)).grid(row=10,column=1)
        Button(master,text='Restart',command=restart).grid(row=11)
        Print_Entry()


def start_program():
    global n_of_classes
    global n_of_classes_entry
    global n_of_classes_button

    n_of_classes = Label(master, text="Number of Classes 1-8:").grid(row=0, sticky=E)
    n_of_classes_entry = Entry(master)
    n_of_classes_entry.grid(row=0, column=1)
    n_of_classes_button = Button(master, bg="green", command=Print_Entry,height=1, width=2).grid(row=0, column=2)

start_program()

1 个答案:

答案 0 :(得分:0)

我建议在IF语句中包含print_entry定义的内容。如果该值可接受,请继续,否则发送错误消息。您可以使用tkinter showinfo消息框发送错误。请参阅下面的代码建议:

from tkinter import messagebox

def Print_Entry():
    nb_entry = n_of_entry.get()
    if nb_entry <9 and nb_entry > 0 :
        global print_command
        global Entry_int

        Entry = n_of_classes_entry.get()
        Entry_int = int(Entry)

        Create_Classes()
    else :
        messagebox.showinfo("Error", "The number of classes must be between 1 and 8")