我是 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()
更新register
類中的方法Register
並command =
在 lambda 表達式之前添加
Button(register_screen, text="Register", width=10, height=1, bg="lightseagreen", command = lambda: master.switch(Login)).pack()
對所有未command =
在方法調用中定義關鍵字的實例重複此操作。
比如login_success()
類中的方法Login
也需要
Button(login_success_screen, text="OK", command = lambda: master.switch(Menu)).pack()
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras