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。最好的解决办法是什么?
发布于 2009-09-18 08:24:39
由于可能但有点麻烦,我决定使用旧风格的“跟踪变量”函数来执行combobox中的值。
将以下语句放在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]
}发布于 2009-09-15 14:29:13
如果您想使用BWidget,可以尝试使用-modifycmd或-postcommand。
无论如何,我建议您尝试ttk::combobox和-postcommand选项。
https://stackoverflow.com/questions/1427380
复制相似问题