Tkinter窗口绑定在“return”后停止工作

2024-09-24 20:38:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我当前有一个绑定到窗口的事件,因此当按下enter键时,将调用checkPassword()。这可以很好地工作,但是当调用checkPassword()时,事件仍然是绑定的,因此使用enter键清除错误框,当将条目留空时,不会像它自己调用的那样工作。你知道吗

 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函数中解除窗口事件的绑定,这个函数也可以工作,但是在返回logIn()之后,logIn()中的窗口绑定不再工作了?(按钮等其他功能正常)。你知道吗

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

Tags: textboxdef事件loginwindowframelabel
1条回答
网友
1楼 · 发布于 2024-09-24 20:38:04

而不是

<KeyRelease-Return>

尝试使用:

<Return>

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

相关问题 更多 >