【发布时间】:2017-10-18 21:51:37
【问题描述】:
如果用户和密码相同,我试图在单击登录按钮时显示“登录成功/失败”文本。
我遇到的问题是,无论我们写什么用户和密码,它总是显示“成功”消息而不是失败消息。
我正在使用.get 来获取用户的输入并保存在变量中。
这是我的代码:
from tkinter import *
root = Tk()
label_name = Label(root, text="Username", fg="black")
label_password = Label(root, text="Password", fg="black")
input_name = Entry(root)
name = input_name.get()
input_password = Entry(root, show="*")
password = input_password.get()
label_name.grid(row=0, column=0, sticky=E)
label_password.grid(row=1, column=0, sticky=E)
input_name.grid(row=0, column=1)
input_password.grid(row=1, column=1)
checkbox = Checkbutton(root, text="Remember me")
checkbox.grid(columnspan=2, sticky=W)
login_button = Button(root, text="Login")
login_button.grid(row=1, column=2)
login_success = Label(root, text="Welcome", fg="black")
login_fail = Label(root, text="login fail", fg="black")
def login(event):
if name == password:
for widget in root.winfo_children():
widget.grid_forget()
login_true = Label(root, text="Welcome", fg="black")
login_true.grid()
elif name != password:
for widget in root.winfo_children():
widget.grid_forget()
login_false = Label(root, text="login fail", fg="black")
login_false.grid()
login_button.bind("<Button-1>", login)
root.mainloop()
编辑: 我也使用了“command”属性,但结果相同:
def login():
name = input_name.get()
password = input_password.get()
if name == password:
for widget in root.winfo_children():
widget.grid_forget()
login_true = Label(root, text="Welcome", fg="black")
login_true.grid()
elif name != password:
for widget in root.winfo_children():
widget.grid_forget()
login_false = Label(root, text="login fail", fg="black")
login_false.grid()
login_button = Button(root, text="Login", command=login)
login_button.grid(row=1, column=2)
root.mainloop()
编辑2: 通过添加新条件修复
def login():
if input_name.get() == "" or input_password.get() == "":
for widget in root.winfo_children():
widget.grid_forget()
login_false = Label(root, text="login fail", fg="black")
login_false.grid()
elif input_name.get() == input_password.get():
for widget in root.winfo_children():
widget.grid_forget()
login_true = Label(root, text="Welcome", fg="black")
login_true.grid()
elif input_name.get() != input_password.get():
for widget in root.winfo_children():
widget.grid_forget()
login_false = Label(root, text="login fail", fg="black")
login_false.grid()
【问题讨论】:
-
恐怕我不相信你。该编辑适用于我和另一位用户。你在两个文本框中输入了什么?如果它们没有不同,它就不会失败。
-
@EthanField 是的,我错了。修复它并立即工作,感谢您的帮助。
-
我建议进行删除“[SOLVED]”的编辑,因为 Stack Exchange 不允许这样做,see here for why。