BWidget ComboBox 小部件允许您使用值填写输入字段。我想在该字段中仅强制执行特定字符(例如,仅[a-z0-9])。为此,我想使用Tcl / Tk的 -validatecommand (或简称-vcmd),就像使用标准的“entry”小部件一样:
proc ValidateMyEntry { value } {
# Check if it's alphanum string
if ![regexp {^[-a-zA-Z0-9]*$} $value] {
return 0
}
return 1
}
entry .my_entry -width 20 -textvariable myVar -validate key -vcmd {ValidateMyEntry %P}
似乎ComboBox不支持-validatecommand。什么是最好的解决方法?
答案 0 :(得分:0)
如果您想使用BWidget,可以尝试使用-modifycmd或-postcommand。
无论如何,我建议你尝试使用-postcommand选项的ttk :: combobox。
答案 1 :(得分:0)
作为可能但有点麻烦的东西,我决定使用旧式的“跟踪变量”功能来强制组合框中的值。
在ComboBox调用之后输入以下语句:
trace variable myVar w forceAlphaNum
在其他地方,你必须定义forceAlphaNum proc:
proc forceAlphaNum { name el op } {
if { $el == "" } {
set newname $name
set oldname ${name}_alphanum
} else {
set newname ${name}($el)
set oldname ${name}_alphanum($el)
}
global $newname
global $oldname
if { ![info exist $oldname] } {
set $oldname ""
}
# Check if it's alphanum string
if ![regexp {^[a-zA-Z0-9]*$} [set $newname]] {
set $newname [set $oldname]
bell; return
}
set $oldname [set $newname]
}