我正在尝试使用Python / tkInter
验证文本的输入def validate_text():
return False
text = Entry(textframe, validate="focusout", validatecommand=validate_text)
其中validate_text是函数 - 我试过总是返回False并且总是返回True并且结果没有区别......?我需要在函数中包含一组参数吗?
编辑 - 从NONE更改为焦点...仍然无法正常工作
答案 0 :(得分:2)
我认为您唯一缺少的是 invalidcommand(或invcmd)。如果返回false,您期望validatecommand(或vcmd)做什么?根据Tk手册(见下文),如果vcmd返回False并且validate not 设置为none,则将调用invcmd。 invcmd的典型命令是Tkinter.bell,它发出响声。另请注意,vcmd和invcmd非常 touchy ,如果它们遇到异常,如果在vcmd或invcmd函数内无论如何更改了widget,或者vcmd没有返回,则会将validate变为'none'一个有效的Tcl布尔值。特别是textvariable因引发问题而臭名昭着,a section in Entry called valdation专门处理这个问题。
以下是来自Tk Command Entry的相关部分(与Spinbox相同)。请参阅下文以获取更多参考
命令行名称: -validatecommand或-vcmd
数据库名称: validateCommand
数据库类:验证命令
当您要验证条目窗口小部件的输入时,指定要评估的脚本。将其设置为{}将禁用此功能(默认设置)。此命令必须返回有效的Tcl布尔值。如果它返回0(或有效的Tcl布尔等效值),那么它意味着您拒绝新版本并且它不会发生,并且如果设置了invalidCommand将被评估。如果返回1,则发生新版本。有关详细信息,请参阅下面的验证。命令行名称: -invalidcommand或-invcmd
数据库名称: invalidCommand
数据库类: InvalidCommand
指定在validateCommand返回0时要进行eval的脚本。将其设置为{}将禁用此功能(默认值)。此选项的最佳用途是将其设置为铃声。有关详细信息,请参阅下面的验证。
查看this SO answer,Tk commands和epydoc-Tkinter以获取更多参考资料。
这个问题有很多重复。
Python tkInter Entry fun
Restricting the value in Tkinter Entry widget
答案 1 :(得分:1)
focusout
表示只有在从entrywidget中取出焦点时才会调用validatecommand。
您可以在输入时尝试使用'key'进行验证。
Tcl手册:
验证通过将validateCommand选项设置为将根据validate选项进行评估的脚本进行验证,如下所示:
无
默认。这意味着不会进行验证。
焦点
当条目收到或失去焦点时,将调用validateCommand。
的focusIn
当条目获得焦点时,将调用validateCommand。
事件的内容
当条目失去焦点时,将调用validateCommand。
键
编辑条目时将调用validateCommand。
所有
将针对上述所有条件调用validateCommand。
答案 2 :(得分:1)
您应该注册验证功能。
def validate_text():
return False
textframe.register(validate_text)
text = Entry(textframe, validate="focusout", validatecommand=validate_text)
答案 3 :(得分:0)
“请注意,此选项[validatecommand]仅在validate选项不是NONE”
时使用来自http://effbot.org/tkinterbook/entry.htm#entry.Entry.config-method