首页 > 解决方案 > 从 sqlite3 数据库中检索保存的生成密码到 gen。登录时输入密码,但我卡住了

问题描述

这是我第一次这样做,我试图在输入正确的详细信息后显示保存在 mysqlite3 数据库中的生成密码以显示在 Gen. 密码,但是,由于某种原因,我不断收到不同类型的错误,甚至搜索了不同的来源,但没有运气显示它,任何人都可以帮我找到问题或缺少什么吗?

  
from tkinter import *

import tkinter.messagebox as tkMessageBox

import sqlite3

from random import randint

root = Tk()
root.title("Random password generator")
 
width = 640
height = 634


screen_width = root.winfo_screenwidth()

screen_height = root.winfo_screenheight()

x = (screen_width/3) - (width/3)

y = (screen_height/3) - (height/3)

root.geometry("%dx%d+%d+%d" % (width, height, x, y))

root.resizable(0, 0)



USERNAME = StringVar()

PASSWORD = StringVar()

GENPASS = StringVar()





def Database():

    global conn, cursor
    conn = sqlite3.connect("db_member.db")
    cursor = conn.cursor()
    cursor.execute("CREATE TABLE IF NOT EXISTS `member` (mem_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, username TEXT, password TEXT, genpass TEXT, lastname TEXT)")




def LoginForm():

    global LoginFrame, lbl_result1, genpass
    LoginFrame = Frame(root)
    LoginFrame.pack(side=TOP, pady=80)


    
    lbl_username = Label(LoginFrame, text="Word:", font=('arial', 18), bd=18)
    lbl_username.grid(row=1)
    
    lbl_password = Label(LoginFrame, text="Password:", font=('arial', 18), bd=18)
    lbl_password.grid(row=2)

    lbl_genpass = Label(LoginFrame, text="Gen. Password:", font=('arial', 18), bd=18)
    lbl_genpass.grid(row=3)
    
    lbl_result1 = Label(LoginFrame, text="", font=('arial', 18))
    lbl_result1.grid(row=4, columnspan=2)

    
    
    username = Entry(LoginFrame, font=('arial', 15), textvariable=USERNAME, width=25)
    username.grid(row=1, column=1)
    
    password = Entry(LoginFrame, font=('arial', 15), textvariable=PASSWORD, width=25)
    password.grid(row=2, column=1)

    genpass = Entry(LoginFrame, font=('arial', 15), width=25)
    genpass.grid(row=3, column=1)


    
    
    
    btn_login = Button(LoginFrame, text="Show password", font=('arial', 18), width=35, command=Login)
    btn_login.grid(row=5, columnspan=2, pady=20)
    
    lbl_register = Label(LoginFrame, text="Register", fg="Blue", font=('arial', 12))
    lbl_register.grid(row=0, sticky=W)
    
    lbl_register.bind('<Button-1>', ToggleToRegister)

def RegisterForm():

    global RegisterFrame, lbl_result2
    RegisterFrame = Frame(root)
    RegisterFrame.pack(side=TOP, pady=40)


    my_password=chr(randint(33,126))
    def new_rand():
        genpass.delete(0, END)

        pw_length = int(my_entry.get())

        my_password=""

        for x in range(pw_length):
            my_password+=chr(randint(33,126))


        genpass.insert(0, my_password)

    
    lbl_username = Label(RegisterFrame, text="Word:", font=('arial', 18), bd=18)
    lbl_username.grid(row=1)

    lf=Label(RegisterFrame, text="Number of password:", font=('arial', 10), bd=18)
    lf.grid(row=2)
    
    lbl_password = Label(RegisterFrame, text="Password:", font=('arial', 18), bd=18)
    lbl_password.grid(row=3)

    lbl_genpass = Label(RegisterFrame, text="Gen. Password:", font=('arial', 18), bd=18)
    lbl_genpass.grid(row=4)

    

    
    lbl_result2 = Label(RegisterFrame, text="", font=('arial', 18))
    lbl_result2.grid(row=6, columnspan=2)

    
    username = Entry(RegisterFrame, font=('arial', 20), textvariable=USERNAME, width=15)
    username.grid(row=1, column=1)


    my_entry = Entry(RegisterFrame, text="",  font=("Helvetica", 20), width=15)
    my_entry.grid(row=2, column=1)                 


    password = Entry(RegisterFrame, font=('arial', 20), textvariable=PASSWORD, width=15)
    password.grid(row=3, column=1)

    genpass = Entry(RegisterFrame, font=('arial', 15), width=25)
    genpass.grid(row=4, column=1)

    my_btn = Button(RegisterFrame, text="Generate password",bg="grey", fg="white", font=('arial', 18), width=35, command=new_rand)
    my_btn.grid(row=7, columnspan=2, pady=20)

    
    btn_login = Button(RegisterFrame, text="Register", font=('arial', 18), width=35, command=Register)
    btn_login.grid(row=8, columnspan=2, pady=20)
    
    lbl_login = Label(RegisterFrame, text="Word", fg="Blue", font=('arial', 12))
    lbl_login.grid(row=0, sticky=W)
    lbl_login.bind('<Button-1>', ToggleToLogin)


    lbl_genpass = Label(RegisterFrame, text="Gen. Password:", font=('arial', 18), bd=18)
    lbl_genpass.grid(row=4)



def ToggleToLogin(event=None):

    RegisterFrame.destroy()
    LoginForm()

def ToggleToRegister(event=None):

    LoginFrame.destroy()
    RegisterForm()



    

def Register():

    Database()
    if USERNAME.get() == "" or PASSWORD.get() == "" or GENPASS.get():
        lbl_result2.config(text="Please complete the required fields!", fg="orange")
    else:
        cursor.execute("SELECT * FROM `member` WHERE `username` = ?", (USERNAME.get()))
        if cursor.fetchone() is not None:
            lbl_result2.config(text="Word is already taken", bg="red",fg="white")
        else:
            cursor.execute("INSERT INTO `member` (username, password, genpass) VALUES(?, ?, ?)", (str(USERNAME.get()), str(PASSWORD.get()), str(GENPASS.get())))
            conn.commit()
            USERNAME.set("")
            PASSWORD.set("")
            GENPASS.set("")
            
            lbl_result2.config(text="Successfully Created!", fg="green")
        cursor.close()
        conn.close()


      
def Login():

    Database()
    if USERNAME.get == "" or PASSWORD.get =="":
        lbl_result1.config(text="Please complete the required field!", fg="orange")
    else:
        cursor.execute("SELECT * FROM `member` WHERE `username` = ? and `password` = ?", (USERNAME.get(), PASSWORD.get()))
        if cursor.fetchone() is not None:
            
           lbl_result1.config(text="Display the generated password registered", bg="green", fg="white")
            
        else:
            lbl_result1.config(text="Invalid word", fg="white", bg="red")
LoginForm()



if __name__ == '__main__':

    root.mainloop()

标签: python

解决方案


推荐阅读