Tkinter window 绑定在 'return' 后停止工作

Tkinter window bind stops working after 'return'

我目前有一个事件绑定到我的 window,这样当按下回车键时,checkPassword() 就会被调用。这工作正常,但是当调用 checkPassword() 时,事件仍然绑定,因此使用回车键清除错误框,当将条目留空时,它不会调用自身。

 def logIn():
        usernameLabel = Label(frame, text = 'Username: ')
        passwordLabel = Label(frame, text = 'Password: ')
        usernameEntry = Entry(frame)
        passwordEntry = Entry(frame, show="*")
        Button1 = Button(frame, text = 'Log in', command = lambda: checkPassword(usernameEntry, passwordEntry))
        usernameLabel.pack()
        usernameEntry.pack()
        passwordLabel.pack()
        passwordEntry.pack()
        Button1.pack(side=RIGHT)
        window.bind("<KeyRelease-Return>", lambda event: checkPassword(usernameEntry, passwordEntry))

    def checkPassword(usernameEntry, passwordEntry):
        username = usernameEntry.get()
        password = passwordEntry.get()
        if username == '':
            box.showerror('Error', 'Field can not be blank')
            return
        elif password == '':
            box.showerror('Error', 'Field can not be blank')
            return
        else:
            # do something

    from tkinter import *
    import tkinter.messagebox as box
    window = Tk()
    frame = Frame(window)
    logIn()
    frame.pack()
    window.mainloop()

为了解决这个问题,我尝试取消绑定 checkPassword 函数中的 window 事件,这也有效,但是在返回 logIn() 后,logIn() 中的 window 绑定不再有效? (其他一切如按钮功能正常)。

def checkPassword(usernameEntry, passwordEntry):
    window.unbind("<KeyRelease-Return>")

而不是

<KeyRelease-Return>

尝试使用:

<Return>

正在触发release绑定,因为按键会关闭对话框,然后释放会再次触发绑定。