我需要在tkinter中编写一个函数,该函数将一直运行直到用户提供正确的密码。原则上,它应该与:
相同check = input('type ok')
while True:
if check == 'ok'
break
else:
check = input('type ok')
print('You made it!')
......但有一些令人沮丧的分歧:
1.我没有使用input()函数,而是从tkinter Text小部件中获取文本
这种检查方法必然是一个返回按键,这通常会使事情变得非常不方便
到目前为止,我所拥有的最好(以伪代码为准):
def authenticate():
root.bind('<Return>', check)
if auth == True:
return
else:
root.after(500, authenticate)
def check():
if pword == correct_pword:
auth = True
def signin():
auth = False
authenticate()
print('you're signed in!')
这样,authenticate
仅在用户按Enter键并且密码正确时返回。我认为这意味着登录中的代码只会继续,但无论出于何种原因,情况似乎并非如此
这是正确的方法吗?我不明白为什么代码在函数返回任何内容之前继续。
答案 0 :(得分:1)
就像jasonharper在评论中所说,你不应该像命令行程序那样思考。特别是,您不需要while循环,因为GUI的主循环已经提供了一个(GUI等待键盘输入,鼠标单击等事件)。
因此,您只需要创建密码条目并将Return键绑定到检查密码是否正确的函数。每次用户按下“返回”时,将调用该函数,例如,如果密码正确则销毁登录窗口,如果错误则清除该条目。
对应代码:
import tkinter as tk
def login(event):
pwd = entry.get()
if pwd == "ok":
print("You are logged in !")
root.destroy()
else:
entry.delete(0, "end")
root = tk.Tk()
entry = tk.Entry(root, show="*")
entry.pack()
entry.bind("<Key-Return>", login)
root.mainloop()