Tcl中的%P是什么?



我在Tcl中看到了这段代码:

entry .amount -validate key -validatecommand {
expr {[string is int %P] || [string length %P]==0}
}

我知道这是一个输入验证,但是"%P"在那个代码里?我在看Tcl的文档,但是我什么也没找到。

我认为这是另一种方式,但它有相同的符号:

proc check_the_input_only_allows_digits_only {P} {
expr {[string is int P] || [string length P] == 0}
}
entry .amount 
-validate key 
-validatecommand {check_the_input_only_allows_digits_only %P}

entry的tcl-tk页面显示

% p

如果允许编辑,则条目的值。如果您将条目小部件配置为具有一个新的文本变量,则这将是该文本变量的值。

https://www.tcl.tk/man/tcl8.4/TkCmd/entry.html M25公路

我认为这是另一种方式,但它有相同的符号:

你接近。你只需要在一些地方使用$,因为你只是在运行一个过程,这是在过程中使用参数的正常情况。

proc check_the_input_only_allows_digits_only {P} {
expr {[string is int $P] || [string length $P] == 0}
}
entry .amount 
-validate key 
-validatecommand {check_the_input_only_allows_digits_only %P}

建议使用过程编写类似的东西,而不是最琐碎的验证(或其他回调);将复杂性直接放在回调中很快就会令人困惑。

我建议在输入阶段保持验证松散,并且只在表单提交时严格验证内容(或按下OK/Apply按钮,或在GUI中有意义的任何东西),因为在输入输入时,在许多表单中有一段时间无效状态确实很方便。因此,每键验证可能应该只用于指示是否相信表单提交将工作,而不是直接阻止甚至瞬态存在。


对于零长度的输入,string is int命令返回true,因为它最初是用来使用该验证机制的。整数的实际验证需要string is int -strict。但现在无法改变;这只是一个错误的默认值…

entry .amount -validate key -validatecommand {string is int %P}

相关内容

  • 没有找到相关文章

最新更新