3

これは私のコードです:

root = Tk()

def mytest():
    var = entry.get()
    print(var)
    return True

entry = Entry(root, validate="key", validatecommand=mytest)
entry.pack()

root.mainloop()

ユーザーが入力する各文字を検証しようとしていました。

問題は、get()メソッドを使用して現在の文字を取得すると、以前の入力までの文字が取得されることです。

たとえば、単語を入力しているとします。"abc"

  • 最初に入力"a"したときは、何も出力されません。
  • 追加する"b"と、印刷されます"a"
  • 入力を続けると"c"、印刷されます"ab"

なぜこの奇妙な振る舞いをするのですか?

4

1 に答える 1

3

すべてを取得しているわけではありません。validate コマンドがまさにそのように機能するためです。テキストが挿入されるに関数を呼び出し、文字が有効でない場合に挿入を拒否する機会を与えます。

変更前の値、変更が受け入れられた場合の値、挿入されたテキスト、および検証を行う際に役立つその他のいくつかを Tkinter に渡すことができます。例については、 https ://stackoverflow.com/a/4140988/7432 の回答を参照してください。

于 2013-04-17T11:02:10.937 に答える