Tcl 限制Tk entry小部件中的输入字符数
在TCL中,如何限制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字段,用户可以在其中输入一些文本,我希望限制文本的长度(例如,不超过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