在TCL中,如何限制entry
窗口小部件中的输入字符数?
我有一个TCL字段,用户可以输入一些文字,我希望限制文字的长度(例如不超过30个字符)。
它有什么选择吗?
答案 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,从而停止再插入。