2

在 TCL 中,如何限制entry小部件中的输入字符数?

我有一个 TCL 字段,用户可以在其中输入一些文本,我希望限制文本的长度(例如不超过 30 个字符)。

有什么选择吗?

4

2 回答 2

4

入口验证回调是方法,%P替换是关键。从文档

%P
如果允许编辑,则为条目​​的值。如果您将条目小部件配置为具有新的文本变量,则这将是该文本变量的值。

这意味着我们这样做:

pack [entry .e -width 50 -validate all -validatecommand {
    expr {[string length %P] <= 30}
}]

好了,您将无法对长度超过 30 的小部件进行任何编辑。(最好还添加一个-invalidcommand规范,以便用户了解发生了什么。)

于 2014-10-10T13:43:10.223 回答
2

我认为没有,但您可以在条目小部件上使用验证,如下所示:

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 从而停止任何更多的插入。

于 2014-10-10T11:42:18.843 回答