为什么tkinter条目不与密码进行比较

问题描述 投票:0回答:1

这是我的代码:

def masterpassgui(password):

    masterpassword = password
    add_window = tk.Tk()
    add_window.title("Master Password")
    add_window.geometry("250x250")
    masterpass_label = tk.Label(add_window, text="Enter your master password:")
    masterpass_label.grid(row=0, column=0, sticky="w")
    masterpass_entry = tk.Entry(add_window)
    masterpass_entry.grid(row=0, column=1)
    masterpass = masterpass_entry.get()
    attempts = 5
    def on_click():
        messagebox.showwarning(f"You have {attempts} attempts left. After that it will lock down.")
    while masterpass != masterpassword:
    masterpass_label = tk.Label(add_window, text="Enter your master password:")
    masterpass_label.grid(row=0, column=0, sticky="w")
        masterpass_entry = tk.Entry(add_window)
        masterpass_entry.grid(row=0, column=1)
        masterpass = masterpass_entry.get()
        if masterpass != masterpassword:
            attempts -= 1
            if attempts == 0:
                sys.exit()
            else:
                on_click()
        else:
            break
    add_window.mainloop()`

我正在尝试制作一个密码管理器,但它卡在了这段代码上。

我期待它询问我的主密码,如果错误,它会给我一个警告,说你还剩一些尝试次数。相反,它只是给我连续 5 条警告消息,然后就关闭了。为什么会出现这种情况?

python tkinter tkinter-entry
1个回答
0
投票

在您的代码中,

masterpass
变量不会在循环内更新,因此它始终检查初始空字符串。此外,
get()
方法会在调用时检索条目小部件的内容,而不是在用户键入时动态检索。

我修改如下:

import tkinter as tk
from tkinter import messagebox
import sys

def masterpassgui(password):
    masterpassword = password
    add_window = tk.Tk()
    add_window.title("Master Password")
    add_window.geometry("250x250")
    
    masterpass_label = tk.Label(add_window, text="Enter your master password:")
    masterpass_label.grid(row=0, column=0, sticky="w")
    masterpass_entry = tk.Entry(add_window)
    masterpass_entry.grid(row=0, column=1)
    
    attempts = 5

    def on_click():
        messagebox.showwarning(f"You have {attempts} attempts left. After that, it will lock down.")

    def check_password():
        nonlocal attempts
        masterpass = masterpass_entry.get()
        if masterpass != masterpassword:
            attempts -= 1
            if attempts == 0:
                sys.exit()
            else:
                on_click()
        else:
            add_window.destroy()

    submit_button = tk.Button(add_window, text="Submit", command=check_password)
    submit_button.grid(row=1, columnspan=2)

    add_window.mainloop()

# Example usage
masterpassgui("your_master_password")
© www.soinside.com 2019 - 2024. All rights reserved.