4

大文字の入力を強制したい入力ボックスのあるTcl/Tkウィンドウがあります。つまり、文字を入力する場合は、単に小文字の入力を拒否するのではなく、入力フィールドに大文字で表示するようにします。

Tcl / Tk wikiのエントリのドキュメントとエントリ検証ページを見てきましたが検証の例はたくさんありますが、フィルタリングキーの例が見つからないため、正しい場所を探している必要はありません。大文字と小文字を変更するための入力。

私が得ることができた最も近いものは次のようなものです:

entry .message -validate key -validatecommand {
    .message insert %i [string toupper "%S"]
    return 0
}

これにより、入力された最初の文字は強制的に大文字になりますが、後続の文字は変換されません。実際、検証スクリプトは最初の文字の後にまったく呼び出されません。テスト用のコマンドを省略する.message insertと、文字ごとに検証スクリプトが呼び出されます。

4

2 に答える 2

5

検証コマンド内のエントリに新しい値を設定すると、検証がオフになります (おそらく無限ループを防ぐため)。ただし、後でオンに戻すことができます。

entry .message -validate key -validatecommand {
    .message insert %i [string toupper "%S"]
    .message configure -validate key
    return 0
}
于 2010-02-15T05:17:16.570 に答える
1

または、イベントとバインディングを使用できます。

entry .message
bind .message <KeyRelease> {
    set v [string toupper [.message get]]
    .message delete 0 end
    .message insert 0 $v
    }

pack .message

これにより、実行を検討できるタイプのアイデアが得られます。イベントでの処理はここでは非常に単純であり、大幅に改善される可能性があります。

于 2010-02-15T09:27:45.133 に答える