在tkinterEntry
小部件中交互式验证内容的推荐技术是什么
我已经阅读了关于使用validate=True
和validatecommand=command
的帖子,这些特性似乎受到限制,因为如果validatecommand
命令更新Entry
小部件的值,它们就会被清除
考虑到这种行为,我们是否应该绑定KeyPress
、Cut
和Paste
事件,并通过这些事件监视/更新Entry
小部件的值?(以及我可能错过的其他相关事件?)
或者我们应该完全忘记交互验证而只对FocusOut
事件进行验证吗
Tags:
在研究和实验了Bryan的代码之后,我制作了一个输入验证的最小版本。以下代码将显示一个输入框,只接受数字
也许我应该补充一点,我仍然在学习Python,我很乐意接受任何和所有的评论/建议
使用
Tkinter.StringVar
跟踪Entry
小部件的值。您可以通过在StringVar
上设置trace
来验证该值下面是一个简短的工作程序,它只接受
Entry
小部件中的有效浮动正确答案是,使用小部件的
validatecommand
属性。不幸的是,这个特性在Tkinter世界中的文档记录严重不足,尽管在Tk世界中的文档记录相当充分。即使它没有很好的文档记录,它也具备了进行验证所需的一切,而无需借助绑定或跟踪变量,也无需在验证过程中修改小部件诀窍是让Tkinter将特殊值传递给validate命令。这些值为您提供了决定数据是否有效所需的所有信息:编辑前的值、编辑后的值(如果编辑有效)以及其他一些信息。不过,要使用这些命令,您需要执行一些巫术操作,以将这些信息传递给validate命令
注意:validation命令返回
True
或False
非常重要。任何其他操作都会导致关闭小部件的验证下面是一个只允许小写的示例。为了便于说明,它还打印所有特殊值的值。它们并不都是必要的;你很少需要超过一两个
有关调用
register
方法时引擎盖下发生的情况的更多信息,请参阅Why is calling register() required for tkinter input validation?有关规范文档,请参见Validation section of the Tcl/Tk Entry man page
相关问题 更多 >
编程相关推荐