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



在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传递给名为max_lengthproc

在此过程中,将检查长度和操作。如果长度大于30,并且操作为1(表示插入),则proc将返回0,从而停止任何其他插入。

相关内容

  • 没有找到相关文章

最新更新