Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tcl 限制Tk entry小部件中的输入字符数_Tcl_Tk_Gtkentry - Fatal编程技术网

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

Tcl 限制Tk entry小部件中的输入字符数,tcl,tk,gtkentry,Tcl,Tk,Gtkentry,在TCL中,如何限制条目小部件中的输入字符数 我有一个TCL字段,用户可以在其中输入一些文本,我希望限制文本的长度(例如,不超过30个字符) 有什么选项吗?我想没有,但您可以在条目小部件上使用验证,如下所示: package require Tk pack [entry .e -validate all -validatecommand {max_length %s 30 %d}] proc max_length {val max act} { if {[string length $v

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

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


有什么选项吗?

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

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_length


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

条目验证回调是方法,而
%p
替换是关键。发件人:

%p
如果允许编辑,则输入的值。如果您正在将entry小部件配置为具有新的textvariable,则这将是该textvariable的值

这意味着我们要做的就是:

pack [entry .e -width 50 -validate all -validatecommand {
    expr {[string length %P] <= 30}
}]
pack[entry.e-宽度50-全部验证-验证命令{

expr{[字符串长度%P]如果用户点击第一个字符,然后在已经有30个字符的情况下输入怎么办?如果他们在第29个位置粘贴40个字符怎么办?@1336087谢谢!哈哈,我想我想我考虑过了。以前从未使用过
%P
,所以谢谢你的问题;我也学到了一些新的东西:)谢谢你的简短而甜蜜的解决方案:)+1