当使用focusOut验证TKINTER中的条目时,如何在焦点上验证下一个条目验证方法不触发
import tkinter
from tkinter import *
def validate_name(name):
if len(name) > 2 and not name.isdigit():
name_textBox.config(bg='#C4C4C4')
return True
elif any(ch.isdigit() for ch in name):
name_textBox.config(bg='#F56B6F')
name_textBox.delete(0, END)
name_textBox.focus_set()
return False
elif len(name) == 0:
name_textBox.config(bg='#F56B6F')
name_textBox.delete(0, END)
name_textBox.focus_set()
return False
elif len(name) <= 2:
name_textBox.config(bg='#F56B6F')
name_textBox.delete(0, END)
name_textBox.focus_set()
return False
else:
name_textBox.config(bg='#F56B6F')
name_textBox.delete(0, END)
name_textBox.focus_set()
return False
def validate_lname(lname):
if len(lname) > 2 and not lname.isdigit():
lname_textBox.config(bg='#FFFFFF')
return True
elif any(ch.isdigit() for ch in lname):
lname_textBox.config(bg='#F56B6F')
lname_textBox.delete(0, END)
lname_textBox.focus_set()
return False
elif len(lname) == 0:
lname_textBox.config(bg='#F56B6F')
lname_textBox.delete(0, END)
lname_textBox.focus_set()
return False
elif len(lname) <= 2:
lname_textBox.config(bg='#F56B6F')
lname_textBox.delete(0, END)
lname_textBox.focus_set()
return False
else:
lname_textBox.config(bg='#F56B6F')
lname_textBox.delete(0, END)
lname_textBox.focus_set()
return False
root = Tk()
name_textBox = Entry(root)
name_textBox.grid(row=0, column=0)
vcmd = root.register(validate_name)
name_textBox.config(validate="focusout", validatecommand=(vcmd,'%P'))
lname_textBox = Entry(root)
lname_textBox.grid(row=1, column=0)
vcmd1 = root.register(validate_lname)
lname_textBox.config(validate="focusout",validatecommand=(vcmd1,'%P'))
root.mainloop()
是Python和Tkinter的新手,我想在一个应用程序上触发验证,其中形式的条目彼此相邻。 输入输入后,如果我将光标转移到另一个输入,我的应用程序会冻结。 我该如何解决 我希望每个条目都验证并使应用程序停止冻结。 我没有从中得到任何错误,只是冻结了。 我不知道为什么会发生。 我已经搜索和没有看到这里的任何答案
import tkinter
from tkinter import *
def validate_name(name):
if len(name) > 2 and not name.isdigit():
name_textBox.config(bg='#C4C4C4')
return True
elif any(ch.isdigit() for ch in name):
name_textBox.config(bg='#F56B6F')
name_textBox.delete(0, END)
name_textBox.focus_set()
return False
elif len(name) == 0:
name_textBox.config(bg='#F56B6F')
name_textBox.delete(0, END)
name_textBox.focus_set()
return False
elif len(name) <= 2:
name_textBox.config(bg='#F56B6F')
name_textBox.delete(0, END)
name_textBox.focus_set()
return False
else:
name_textBox.config(bg='#F56B6F')
name_textBox.delete(0, END)
name_textBox.focus_set()
return False
def validate_lname(lname):
if len(lname) > 2 and not lname.isdigit():
lname_textBox.config(bg='#FFFFFF')
return True
elif any(ch.isdigit() for ch in lname):
lname_textBox.config(bg='#F56B6F')
lname_textBox.delete(0, END)
lname_textBox.focus_set()
return False
elif len(lname) == 0:
lname_textBox.config(bg='#F56B6F')
lname_textBox.delete(0, END)
lname_textBox.focus_set()
return False
elif len(lname) <= 2:
lname_textBox.config(bg='#F56B6F')
lname_textBox.delete(0, END)
lname_textBox.focus_set()
return False
else:
lname_textBox.config(bg='#F56B6F')
lname_textBox.delete(0, END)
lname_textBox.focus_set()
return False
root = Tk()
name_textBox = Entry(root)
name_textBox.grid(row=0, column=0)
vcmd = root.register(validate_name)
name_textBox.config(validate="focusout", validatecommand=(vcmd,'%P'))
lname_textBox = Entry(root)
lname_textBox.grid(row=1, column=0)
vcmd1 = root.register(validate_lname)
lname_textBox.config(validate="focusout",validatecommand=(vcmd1,'%P'))
root.mainloop()
Am new to Python and Tkinter i want to trigger validation on an of a app, where entries in a form are adjacent to each other.
After input into entry if i move my cursor to another entry my app freezes.
How do i fix it
I want each entry to validate and for the App to stop freezing.
I didnt get any error out of it, it simply just froze.
I have no idea why it is happeing.
I have have searched and havent seen any answer about here
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
两个功能都是相同的,因为重复了。实际上。您不需要它。
从
tkinter导入 *
避免通配符您应该使用
导入tkinter作为tk
而不是从tkinter导入 *添加两个函数:
testVal()
go_to_to_to_next_entry()
儿童的孩子...
entry.bind('&lt; return&gt;',...
sippet:
Both functions are the same, because of duplicated. Actually. you don't need it.
Avoid wildcard from
tkinter import *
You should use
import tkinter as tk
instead of from tkinter import *Add two function:
testVal()
go_to_next_entry()
child for child...
entry.bind('<Return>',...
Snippet: