Python tkInter文本条目验证

时间:2009-06-19 15:54:36

标签: python tkinter

我正在尝试使用Python / tkInter

验证文本的输入
def validate_text():
    return False


text = Entry(textframe, validate="focusout", validatecommand=validate_text)

其中validate_text是函数 - 我试过总是返回False并且总是返回True并且结果没有区别......?我需要在函数中包含一组参数吗?

编辑 - 从NONE更改为焦点...仍然无法正常工作

4 个答案:

答案 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 answerTk commandsepydoc-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