在 TCL 中,如何限制entry
小部件中的输入字符数?
我有一个 TCL 字段,用户可以在其中输入一些文本,我希望限制文本的长度(例如不超过 30 个字符)。
有什么选择吗?
入口验证回调是方法,%P
替换是关键。从文档:
%P
如果允许编辑,则为条目的值。如果您将条目小部件配置为具有新的文本变量,则这将是该文本变量的值。
这意味着我们这样做:
pack [entry .e -width 50 -validate all -validatecommand {
expr {[string length %P] <= 30}
}]
好了,您将无法对长度超过 30 的小部件进行任何编辑。(最好还添加一个-invalidcommand
规范,以便用户了解发生了什么。)
我认为没有,但您可以在条目小部件上使用验证,如下所示:
package require Tk
pack [entry .e -validate all -validatecommand {max_length %s 30 %d}]
proc max_length {val max act} {
if {[string length $val] >= $max && $act == 1} {
return 0
}
return 1
}
条目框将尝试验证每个条目,并将当前字符串%s
和操作%d
传递给proc
命名的max_length
在这个过程中,检查长度和动作。如果长度大于 30 并且动作是1
(意味着插入),那么 proc 将返回 0 从而停止任何更多的插入。