限制Tk条目小部件中的输入字符数

时间:2014-10-10 10:08:05

标签: tcl tk gtkentry

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

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

它有什么选择吗?

2 个答案:

答案 0 :(得分:4)

条目验证回调是方式,%P替换是关键。来自the docs

  

<强>%P
  允许编辑时条目的值。如果要将条目窗口小部件配置为具有新的文本变量,则这将是该文本变量的值。

这意味着我们这样做:

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

你去了,你将无法对小部件做任何编辑,使其长度超过30.(最好还添加一个-invalidcommand规范,以便用户可以找出发生了什么。)

答案 1 :(得分: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的{​​{1}}

在此过程中,检查长度和操作。如果长度大于30且动作为max_length(意味着插入),则proc将返回0,从而停止再插入。