编程项目 class。我一直收到同样的错误

Project for programming class. I keep receiving the same error

我是 python 的新手,我正在尝试在 Gui Python 中创建一个应用程序。目标是创建一个注册/注册页面。那么,应该向用户开放四种可能

在我尝试添加带有注册或注册按钮的第一页之前,代码运行良好。现在我不断收到这个错误: “位置参数在关键字参数之后” 但是,我找不到错误在哪里。如果有人能帮助我,我将不胜感激!!!

from tkinter import *
from tkinter import messagebox
import functions




class App(Tk):
    def __init__(self):
        Tk.__init__(self)
        self._frame = None
        self.title("Healtheat")
        self.switch(Entering)
        self.geometry('350x350')
        self.config(bg = "black")

    def switch(self, frame_class):
        """Destroys current frame and replaces it with a chosen by the user"""
        new_frame = frame_class(self)
        if self._frame is not None:
            self._frame.destroy()
        self._frame = new_frame
        self._frame.pack()

class Entering(Frame):
    def __init__(self, master):
        Frame.__init__(self, master)
        self.config(bg = "black")

        global main_screen
        main_screen.title("Heyyy :)")
        Label(text="Select Your Choice", bg="lightseagreen", width="300", height="2", font=("Calibri", 13)).pack()
        Label(text="").pack()
        Button(text="Login", height="2", width="30", command = lambda: master.switch(Login)).pack()
        Label(text="").pack()
        Button(text="Register", height="2", width="30", command = lambda: master.switch(Register)).pack()


class Register(Frame):
    def __init__(self, master):
        Frame.__init__(self, master)
        self.config(bg = "black")

    def register():
        global register_screen
        register_screen = Toplevel(main_screen)
        register_screen.title("Join us our team")
        register_screen.geometry("350x350")

        global username
        global password
        global img
        global username_entry
        global password_entry

        username = StringVar()
        password = StringVar()


        Label(register_screen, text="Please enter details below", bg="red").pack()
        Label(register_screen, text="").pack()

        username_lable = Label(register_screen, text="Username * ")
        username_lable.pack()
        username_entry = Entry(register_screen, textvariable=username)
        username_entry.pack()

        password_lable = Label(register_screen, text="Password * ")
        password_lable.pack()
        password_entry = Entry(register_screen, textvariable=password, show='*')
        password_entry.pack()

        Label(register_screen, text="").pack()
        Button(register_screen, text="Register", width=10, height=1, bg="lightseagreen", lambda: master.switch(Login)).pack()

class Login(Frame):
    def __init__(self, master):
        Frame.__init__(self, master)
        self.config(bg = "black")

    def login(self):
        global login
        login_screen = Toplevel(main_screen)
        login_screen.title("Welcome back!")
        login_screen.geometry("350x350")
        Label(login_screen, text="Please enter details below to login").pack()
        Label(login_screen, text="").pack()

        global username_verify
        global password_verify

        self.username_verify = StringVar()
        self.password_verify = StringVar()

        global username_login_entry
        global password_login_entry

        Label(login_screen, text="Username * ").pack()
        username_login_entry = Entry(login_screen, textvariable=username_verify)
        username_login_entry.pack()
        Label(login_screen, text="").pack()
        Label(login_screen, text="Password * ").pack()
        password_login_entry = Entry(login_screen, textvariable=password_verify, show='*')
        password_login_entry.pack()
        Label(login_screen, text="").pack()
        Button(login_screen, text="Login", width=10, height=1, command=login_verify).pack()

    def login_verify(self):
        self.username1 = username_verify.get()
        self.password1 = password_verify.get()
        username_login_entry.delete(0, END)
        password_login_entry.delete(0, END)

        list_of_files = os.listdir()
        if username1 in list_of_files:
            file1 = open(username1, "r")
            verify = file1.read().splitlines()
            if password1 in verify:
                login_sucess()

            else:
                password_not_recognised()

        else:
            user_not_found()

    def login_sucess(self):
        global login_success_screen
        login_success_screen = Toplevel(login_screen)
        login_success_screen.title("Success")
        login_success_screen.geometry("150x100")
        Label(login_success_screen, text="Login Success").pack()
        Button(login_success_screen, text="OK", lambda: master.switch(Menu)).pack()

    def password_not_recognised(self):
        global password_not_recog_screen
        password_not_recog_screen = Toplevel(login_screen)
        password_not_recog_screen.title("Success")
        password_not_recog_screen.geometry("150x100")
        Label(password_not_recog_screen, text="Invalid Password ").pack()
        Button(password_not_recog_screen, text="OK", command=delete_password_not_recognised).pack()

    def user_not_found(self):
        global user_not_found_screen
        user_not_found_screen = Toplevel(login_screen)
        user_not_found_screen.title("Success")
        user_not_found_screen.geometry("150x100")
        Label(user_not_found_screen, text="User Not Found").pack()
        Button(user_not_found_screen, text="OK", command=delete_user_not_found_screen).pack()


    def delete_login_success(self):
        login_success_screen.destroy(self)

    def delete_password_not_recognised(self):
        password_not_recog_screen.destroy(self)

    def delete_user_not_found_screen(self):
        user_not_found_screen.destroy(self)



class Menu(Frame):
    """Main menu"""
    def __init__(self, master):
        Frame.__init__(self, master)
        self.config(bg = "black")

        """Frame widgets"""
        label = Label(self, text = "Project Notes Presents Nutrition Calculator!\n Choose an option."\
                      , bg = "black", fg = "white")
        label.pack()
        button = Button(self, text = "Calculator", width = 20, command = lambda: master.switch(Calculator))
        button.pack(padx = 10, pady = 10)
        button2 = Button(self, text = "Add a product", width = 20, command = lambda: master.switch(File_Write))
        button2.pack()
        button3 = Button(self, text = "BMI Calculator", width = 20, command = lambda: master.switch(BMI))
        button3.pack(padx = 10, pady = 10)
        button4 = Button(self, text = "Exit", width = 20, command = self.close)
        button4.pack(padx = 10, pady = 10)


    def close(self):
        """Close the app"""
        self.destroy()
        exit()


class Calculator(Frame):
    """Writing nutritional values of the user defined food"""
    def __init__(self, master):
        Frame.__init__(self, master)
        self.config(bg = "black")

        def on_click():
            """Checking data and writing the results"""
            product = entryProduct.get()
            gram = entryGram.get()
            output.delete(0.0, END)

            Error = False
            try:
                gram = int(entryGram.get())
            except:
                Error = True
            try:
                x = int(product)
                Error = True
            except:
                pass
            if Error == True:
                messagebox.showerror("Error", "Please enter correct data!")
            else:
                functions.file_open()
                output.insert(END, functions.result(product, gram))

        """Frame widgets"""
        label = Label(self, text ="Enter a product that you ate.", bg = "black", fg = "white")
        label.pack()
        # user input, product
        label2 = Label(self, text = "Name: ", bg = "black", fg = "white")
        label2.pack()
        entryProduct = Entry(self, width = 20, bg = "white")
        entryProduct.pack()
        # user input, amount
        label3 = Label(self, text = "Amount: ", bg = "black", fg = "white")
        label3.pack()
        entryGram = Entry(self, width = 20, bg = "white")
        entryGram.pack()
        # submit
        submit = Button(self, text = "Submit", width = 8, command = on_click)
        submit.pack(padx = 10, pady = 10)
        # output
        label4 = Label(self, text = "These are the nutrition values:", bg = "black", fg = "white")
        label4.pack()
        output = Text(self, width = 20, height = 6, wrap = WORD, bg = "white")
        output.pack()
        #going back to menu
        self.button = Button(self, text = "Back", width = 8, command = lambda: master.switch(Menu))
        self.button.pack(padx = 10, pady = 10)


class File_Write(Frame):
    """User can add new new products and their values"""
    def __init__(self, master):
        Frame.__init__(self, master)
        self.config(bg = "black")

        def validate():
            """Checks is the user inputs correct data"""
            def write(name, kcal, protein, carb, fat):
                """Writes to file"""
                file = open("../../Downloads/PN-NutritionalCalculator/Products.txt", "a")
                productValue = "%s,%s:%s:%s:%s" % (name, kcal, protein, carb, fat)
                file.write("\n" + productValue)
                file.close()
                #Emptying inputs
                nameEntry.delete(0, END)
                kcalEntry.delete(0, END)
                proteinEntry.delete(0, END)
                carbEntry.delete(0, END)
                fatEntry.delete(0, END)

            error = False
            # checking if kcal, protein, carb and fat are integers and productName is a string
            try:
                name = int(nameEntry.get())
                error = True
            except:
                 name = nameEntry.get()
            try:
                kcal = int(kcalEntry.get())
                protein = int(proteinEntry.get())
                carb = int(carbEntry.get())
                fat = int(fatEntry.get())
            except:
                error = True
            if error == True:
                messagebox.showerror("Error", "Please enter correct data!")
            else:
                #writing to a file
                write(name, kcal, protein, carb, fat)

        """Frame widgets"""
        label = Label(self, text ="Enter the product name and its nutritional "\
                "values per 100 gram", bg = "black", fg = "white")
        label.pack()
        label1 = Label(self, text = "Name:", bg = "black", fg = "white")
        label1.pack()
        nameEntry = Entry(self, width = 20, bg = "white")
        nameEntry.pack()

        label2 = Label(self, text = "Calories:", bg = "black", fg = "white")
        label2.pack()
        kcalEntry = Entry(self, width = 20, bg = "white")
        kcalEntry.pack()

        label3 = Label(self, text = "Protein:", bg = "black", fg = "white")
        label3.pack()
        proteinEntry = Entry(self, width = 20, bg = "white")
        proteinEntry.pack()

        label4 = Label(self, text = "Carbs:", bg = "black", fg = "white")
        label4.pack()
        carbEntry = Entry(self, width = 20, bg = "white")
        carbEntry.pack()

        label5 = Label(self, text = "Fat:", bg = "black", fg = "white")
        label5.pack()
        fatEntry = Entry(self, width = 20, bg = "white")
        fatEntry.pack()

        submit = Button(self, text = "Submit", width = 8, command = validate)
        submit.pack(padx = 10, pady = 10)

        button3 = Button(self, text = "Back", width = 20, command = lambda: master.switch(Menu))
        button3.pack(padx = 10, pady = 10)

class BMI(Frame):
    """Writing nutritional values of the user defined food"""
    def __init__(self, master):
        Frame.__init__(self, master)
        self.config(bg = "black")

        def calculate_bmi(a=""):
            print(a)
            try:
                height = entryheight.get()
                weight = entryweight.get()
                height = float(height) / 100.0
                bmi = float(weight) / (height ** 2)
            except ZeroDivisionError:
                messagebox.showinfo("Result", "Please enter positive height!!")
            except ValueError:
                messagebox.showinfo("Result", "Please enter valid data!")
            else:
                if bmi <= 15.0:
                    res = "Your BMI is " + str(bmi) + "\nRemarks: Very severely underweight!!"
                    messagebox.showinfo("Result", res)
                elif 15.0 < bmi <= 16.0:
                    res = "Your BMI is " + str(bmi) + "\nRemarks: Severely underweight!"
                    messagebox.showinfo("Result", res)
                elif 16.0 < bmi < 18.5:
                    res = "Your BMI is " + str(bmi) + "\nRemarks: Underweight!"
                    messagebox.showinfo("Result", res)
                elif 18.5 <= bmi <= 25.0:
                    res = "Your BMI is " + str(bmi) + "\nRemarks: Normal."
                    messagebox.showinfo("Result", res)
                elif 25.0 < bmi <= 30:
                    res = "Your BMI is " + str(bmi) + "\nRemarks: Overweight."
                    messagebox.showinfo("Result", res)
                elif 30.0 < bmi <= 35.0:
                    res = "Your BMI is " + str(bmi) + "\nRemarks: Moderately obese!"
                    messagebox.showinfo("Result", res)
                elif 35.0 < bmi <= 40.0:
                    res = "Your BMI is " + str(bmi) + "\nRemarks: Severely obese!"
                    messagebox.showinfo("Result", res)
                else:
                    res = "Your BMI is " + str(bmi) + "\nRemarks: Super obese!!"
                    messagebox.showinfo("Result", res)


        """Frame widgets"""
        label = Label(self, text="Welcome to your BMI Calculator", bg="black", fg="white")
        label.pack()
        # user input, product
        label2 = Label(self, text="Weight (kg)", bg="black", fg="white")
        label2.pack()
        entryweight = Entry(self, width=20, bg="white")
        entryweight.pack()
        # user input, amount
        label3 = Label(self, text="Height(cm)", bg="black", fg="white")
        label3.pack()
        entryheight = Entry(self, width=20, bg="white")
        entryheight.pack()
        # submit
        submit = Button(self, text="Submit", width=8, command=calculate_bmi)
        submit.pack(padx=10, pady=10)
        # going back to menu
        self.button = Button(self, text="Back", width=8, command=lambda: master.switch(Menu))
        self.button.pack(padx=10, pady=10)

if __name__ == "__main__":
    app = App()
    app.mainloop()

更新 class Register 中的 register 方法并在您的 lambda 表达式前添加 command =

Button(register_screen, text="Register", width=10, height=1, bg="lightseagreen", command = lambda: master.switch(Login)).pack()

对所有未定义关键字的实例重复此操作 command = 在你的方法调用中。

例如classLogin中的login_success()方法也需要

Button(login_success_screen, text="OK", command = lambda: master.switch(Menu)).pack()