简体   繁体   English

Python 登录验证(Tkinter)

[英]Python Login verification (Tkinter )

The error I get while running the code below is that it only prints the last else statement even if the parameters for login are correct.我在运行下面的代码时遇到的错误是,即使登录参数正确,它也只会打印最后一个 else 语句。 I don't know what is causing the error so I have decided to copy and paste my whole code我不知道是什么导致了错误,所以我决定复制并粘贴我的整个代码

from Tkinter import * 

def submit_btn():

   
    file = open("clientinfo.txt", "a")
    file.write(f"{user_entery.get(), pass_entery.get()}\n")
    file.close()
    user_entery.delete(0, END)
    pass_entery.delete(0, END)
    Label(screen1, text=" ").pack()
    Label(screen1, text="Succsefuly Registered ", fg = "green", font = ("Airel", 12)).pack()
    
    
def register():

    global screen1 
    screen1 = Toplevel(screen)
    screen1.title("Register")
    screen1.geometry("400x300")
    global user_entery
    global pass_entery
    username = StringVar()
    password = StringVar()
    Label(screen1, text="Please enter the required fields ").pack()
    Label(screen1, text=" ").pack()
    Label(screen1, text="Username:").pack()
    user_entery = Entry(screen1, textvariable = username)
    user_entery.pack()
    Label(screen1, text="Password *").pack()
    pass_entery = Entry(screen1, textvariable = password)
    pass_entery.pack()
    Label(screen1, text=" ").pack()
    Button(screen1, text = "Submit", width=15 , height=1, command = submit_btn).pack()

def verify_login():

    username2 = verify_user.get()
    password2 = verify_pass.get()
    print(username2)
    print(password2)
    user_entery2.delete(0, END)
    pass_entery2.delete(0, END)
    file2 = open("clientinfo.txt")
    text = file2.readlines()
    if username2 in text:
        verify=file2.read().splitlines()
        if password2 in verify: 
            print("Succses")
        else:
            print("pass failed")
    else:
        print("user failed")

def login():
    global screen2 
    screen2 = Toplevel(screen)
    screen2.title("Login")
    screen2.geometry("400x300")
    Label(screen2, text="Enter your Username and Password to Login").pack()
    Label(screen2, text=" ").pack()
    global verify_user
    global verify_pass
    global user_entery2
    global pass_entery2
    verify_user= StringVar()
    verify_pass= StringVar()
    Label(screen2, text="Username:").pack()
    user_entery2 = Entry(screen2, textvariable = verify_user)
    user_entery2.pack()
    Label(screen2, text=" ").pack()
    Label(screen2, text="Password:").pack()
    pass_entery2 = Entry(screen2,  show='*', textvariable = verify_pass)
    Label(screen2, text=" ").pack()
    pass_entery2.pack()
    Label(screen2, text=" ").pack()
    Button(screen2, text = "Login", width = 15, height=1, command= verify_login).pack()

def sign_in_screen():
    global screen 
    screen = Tk()
    screen.geometry("400x300")
    screen.title("Login/Register")
    Label(text="Movie booking", bg="grey", width = "300", height= "2", font = ("Airel", 13)).pack()
    Label(text="").pack()
    Button(text="Login", height="2", width="30", command=login).pack()
    Label(text="").pack()
    Button(text="Register", height="2", width="30", command=register).pack()

    screen.mainloop()


def run_function():

    sign_in_screen()

run_function()

Have a look at this part of code:看看这部分代码:

def verify_login():

    text = file2.readlines()

    if username2 in text:
        #[...]

    else:
        #[...]

.readlines() returns a list of lines in the specified .txt file. .readlines()返回指定.txt文件中的行列表。

So if you register with say username = username1 and passowrd = password1 and one more time with username = username2 and passowrd = password2 , so your clientinfo.txt will look somewhat like this:因此,如果您使用 username = username1和 passowrd = password1进行注册,然后再使用 username = username2和 passowrd = password2进行注册,那么您的clientinfo.txt将看起来像这样:

('username1', 'password1')
('username2', 'password2')

and the variable text will hold the value并且变量text将保存该值

["('username1', 'password1')\n", "('username2', 'password2')\n"]

So in order to check for the username and password you need to use a for loop因此,为了检查用户名和密码,您需要使用for 循环

def verify_login():
    #[...]
    count = 0
    for data in text:
        if data.startswith(f"('{username2}',"):
            count += 1              
            if data == f"{username2,password2}\n":
                print("Success")
                break
            else:
                print("pass failed")
                
    if count == 0: #If there are no users with name specified this line will get executed
        print("user failed")

Here's the final working code:这是最终的工作代码:

from tkinter import * 

def submit_btn():

   
    file = open("clientinfo.txt", "a")
    file.write(f"{user_entery.get(), pass_entery.get()}\n")
    file.close()
    user_entery.delete(0, END)
    pass_entery.delete(0, END)
    Label(screen1, text=" ").pack()
    Label(screen1, text="Succsefuly Registered ", fg = "green", font = ("Airel", 12)).pack()
    
    
def register():

    global screen1 
    screen1 = Toplevel(screen)
    screen1.title("Register")
    screen1.geometry("400x300")
    global user_entery
    global pass_entery
    username = StringVar()
    password = StringVar()
    Label(screen1, text="Please enter the required fields ").pack()
    Label(screen1, text=" ").pack()
    Label(screen1, text="Username:").pack()
    user_entery = Entry(screen1, textvariable = username)
    user_entery.pack()
    Label(screen1, text="Password *").pack()
    pass_entery = Entry(screen1, textvariable = password)
    pass_entery.pack()
    Label(screen1, text=" ").pack()
    Button(screen1, text = "Submit", width=15 , height=1, command = submit_btn).pack()

def verify_login():

    username2 = verify_user.get()
    password2 = verify_pass.get()
    print(username2)
    print(password2)
    user_entery2.delete(0, END)
    pass_entery2.delete(0, END)
    file2 = open("clientinfo.txt")
    text = file2.readlines()
    print(text)
    count = 0
    for data in text:
        if data.startswith(f"('{username2}',"):
            count += 1              
            if data == f"{username2,password2}\n":
                print("Success")
                break
            else:
                print("pass failed")
                
    if count == 0: #If there are no users with name specified this line will get executed
        print("user failed")

def login():
    global screen2 
    screen2 = Toplevel(screen)
    screen2.title("Login")
    screen2.geometry("400x300")
    Label(screen2, text="Enter your Username and Password to Login").pack()
    Label(screen2, text=" ").pack()
    global verify_user
    global verify_pass
    global user_entery2
    global pass_entery2
    verify_user= StringVar()
    verify_pass= StringVar()
    Label(screen2, text="Username:").pack()
    user_entery2 = Entry(screen2, textvariable = verify_user)
    user_entery2.pack()
    Label(screen2, text=" ").pack()
    Label(screen2, text="Password:").pack()
    pass_entery2 = Entry(screen2,  show='*', textvariable = verify_pass)
    Label(screen2, text=" ").pack()
    pass_entery2.pack()
    Label(screen2, text=" ").pack()
    Button(screen2, text = "Login", width = 15, height=1, command= verify_login).pack()

def sign_in_screen():
    global screen 
    screen = Tk()
    screen.geometry("400x300")
    screen.title("Login/Register")
    Label(text="Movie booking", bg="grey", width = "300", height= "2", font = ("Airel", 13)).pack()
    Label(text="").pack()
    Button(text="Login", height="2", width="30", command=login).pack()
    Label(text="").pack()
    Button(text="Register", height="2", width="30", command=register).pack()

    screen.mainloop()


def run_function():

    sign_in_screen()

run_function()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM