我正在尝试对键和焦点进行验证,以便将输入限制为允许的字符并且我可以在用户集中注意力时调用一个函数(留下有效的条目(。
这样的事情可能发生吗?
import tkinter as tk
class Example(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
vcmd = (self.register(self.on_validate), '%S')
vcmd2 = (self.register(self.if_valid), '%s')
# This is the meat of the question; looking to do something like
self.entry = tk.Entry(self,
validate="key",
validate2="focusout",
validatecommand=vcmd,
validate2command=vcmd2)
self.text = tk.Text(self, height=10, width=40)
self.entry.pack(side="top", fill="x")
self.text.pack(side="bottom", fill="both", expand=True)
def on_validate(self, S):
# Disallow anything but binary string
if S == '1' or '0':
return True
else:
self.bell()
return False
def if_valid(self, s):
if len(s) == 3:
self.my_function(s)
return True
else:
return False
def my_function(self, value):
# send value somewhere
pass
if __name__ == "__main__":
root = tk.Tk()
Example(root).pack(fill="both", expand=True)
root.mainloop()
取自:https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/entry-validation.html也许您想使用所有?
'cus'每当Entry小部件获得或失去焦点时进行验证(请参阅第53节,"焦点:路由键盘输入"(。
"focusin"在小部件获得焦点时进行验证。
"focusout"在小部件失去焦点时进行验证。
"key"在任何击键更改小部件内容时进行验证。
"all"在上述所有情况下进行验证。
"none"关闭验证。这是默认选项值。笔记这是字符串"none",而不是特殊的Python值none。
如果必须只验证focusout
和key
,则可以使用all
,然后在验证方法中,只需调用.get_focus()
方法即可查看焦点是否在框上。