为什么tkinter的输入框不与密码比较
这是我的代码:
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")