代码之家  ›  专栏  ›  技术社区  ›  Roalt

使用BWidget的组合框验证条目

  •  0
  • Roalt  · 技术社区  · 17 年前

    组合框 小部件允许您用值填充输入字段。我只希望在该字段中强制使用特定字符(例如,仅[a-z0-9])。为此,我想使用Tcl/Tk -验证命令 (简称-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}
    

    2 回复  |  直到 17 年前
        1
  •  0
  •   Carlos Tasada    17 年前

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

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

        2
  •  0
  •   Roalt    16 年前

    将以下语句放在ComboBox调用之后:

    trace variable myVar w forceAlphaNum
    

    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]
    }