0

BWidget ComboBox小部件允许您使用值填写输入字段。我只想在该字段中强制执行特定字符(例如,仅 [a-z0-9])。为此,我想使用 Tcl/Tk 的-validatecommand(或简称 -vcmd),就像使用标准的“入口”小部件一样:

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。最好的解决方法是什么?

4

2 回答 2

0

如果要使用 BWidget,可以尝试使用 -modifycmd 或 -postcommand。

无论如何,我建议您尝试使用 -postcommand 选项的 ttk::combobox。

于 2009-09-15T14:29:13.700 回答
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]
}
于 2009-09-18T08:24:39.627 回答