0

BWidget ComboBoxウィジェットを使用すると、入力フィールドに値を入力できます。そのフィールドの特定の文字のみを強制したい(たとえば、[a-z0-9]のみ)。そのために、標準の「entry」ウィジェットの場合と同じように、Tcl / Tkの-validateコマンド(または略して-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は-validateコマンドをサポートしていないようです。最善の回避策は何ですか?

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 に答える