为什么tkinter的输入框不与密码比较

0 投票
1 回答
37 浏览
提问于 2025-04-14 15:32

这是我的代码:

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条警告信息,然后就直接关闭了。为什么会这样呢?

1 个回答

2

在你的代码中,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")

撰写回答