0

My program creates a simple application, using Tkinter, that aims to compare a user's details (username and password) to a file.

My program uses 3 frames. -"usernameFrame" -"passwordFrame" -"resultFrame"

It has a username label calld "ulab" and a password label called "plab" It has an "Output" label which tells the user if he has successfully logged in or not At the bottom it has a Login button which connects to the command "LoginF".

However, I always get the error "TypeError: LoginF() missing 2 required positional arguments: 'username' and 'password"

from tkinter import *

root = Tk()
root.title("Validating user details")

Title = Label(root,text="Welcome, please login below", fg = "blue", bg = "yellow", font = "Verdana 30 bold", bd=1, relief="solid",padx=20)
Title.pack(side = TOP)

usernameFrame = Frame(root)
usernameFrame.pack(side = TOP)
uLab = Label(usernameFrame,text="Enter username: ",fg="light green",bg="green",font = "Calibri 26 italic",bd=1, relief="solid")
uLab.pack(side = LEFT)
username = Entry(usernameFrame)
username.pack(side = LEFT)

passwordFrame = Frame(root)
passwordFrame.pack(side = TOP)
pnLab = Label(passwordFrame,text="Enter password: ",fg="light green",bg="green",font = "Calibri 26 italic",bd=1, relief="solid")
pnLab.pack(side = LEFT,fill = X,expand = 1)
password = Entry(passwordFrame,show="*")
password.pack(side = LEFT)

resultFrame = Frame(root)
resultFrame.pack(side = TOP)

Output = Label(resultFrame,text="Display Result Here",fg="#008080",bg="#00FFFF",font = "Tahoma 30 bold",bd=1, relief="solid")
Output.pack(side = LEFT,fill = X,expand = 1)

def LoginF(username,password):
    Login = False
    file = open("OCR PPP Python Login List_user.txt","r")
    data = file.read()

    if username+","+password in data:
        Output.configure(text="Successfully logged in")
        Login = True
    else:
        Output.configure(text="Hmm.. Try again")
        Login = False 

    file.close()

logButton = Button(resultFrame,text="Login",fg="#FF8C00",bg="#FF4500",font = "Ariel 28 underline",bd=1, relief="solid",command=LoginF)
logButton.pack(side = LEFT)

root.mainloop()
Rapha Nash
  • 13
  • 4

1 Answers1

0

This is because you haven't pass any arguments to the LoginF(...) function.

Either you do this:

logButton = Button(resultFrame,text="Login",fg="#FF8C00",bg="#FF4500",font = "Ariel 28 underline",bd=1, relief="solid",
            command=lambda: LoginF(username.get(), password.get()))

To know more about how to pass functions as callback in tkinter.

Or

Change your LoginF() a little bit like so.

def LoginF():
    username = username.get()
    password = password.get()
    Login = False
    file = open("OCR PPP Python Login List_user.txt","r")
    data = file.read()

    if username+","+password in data:
        Output.configure(text="Successfully logged in")
        Login = True
    else:
        Output.configure(text="Hmm.. Try again")
        Login = False 

    file.close()
Saad
  • 3,340
  • 2
  • 10
  • 32