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
绑定,因为按键会关闭对话框,然后释放会再次触发绑定。
我目前有一个事件绑定到我的 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
绑定,因为按键会关闭对话框,然后释放会再次触发绑定。