python - 授权继续返回

时间:2017-01-26 19:32:37

标签: python tkinter

我需要在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键并且密码正确时返回。我认为这意味着登录中的代码只会继续,但无论出于何种原因,情况似乎并非如此 这是正确的方法吗?我不明白为什么代码在函数返回任何内容之前继续。

1 个答案:

答案 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()