

validatecommandは選択範囲があるとき  
1 選択範囲の文字を削除  
2 本来の入力予定の文字の挿入  
と2回動きます  
引数で取れる%Sは1回目のときは削除予定の文字,2回目で入力予定の文字です

2回目の文字列を何らかの形で保持したまま1回目の削除を行っていると思うのですが  
1回目の削除前に入力予定の文字を取得したいとき,なにかアクセス方法はないでしょうか？

目的は｢入力予定がFalseなら選択範囲と文字の削除を行わない｣見た目の実装です  
通常の検証つきEntryの振る舞いは  
選択範囲へダメな文字列の挿入を行うと,選択範囲と文字が消える (1回目だけが通る)  
です.2回目がダメなら1回目の削除そのものを止めたいのです

いまは1回目で範囲と文字列を保持し,2回目がダメだったら復元 という処理でこれを行っていますが  
予め入力予定文字が取れれば,選択範囲があるときの挙動を切り出して書けるのにと思って質問しました

[code]

    prev_idxs = ()
    prev_chars = ()
    entry = ttk.Entry()
    
    def validate(old:'%s', new:'%S', idx:'%i', mode:'%d'):
        global prev_idxs, prev_chars
        # 選択範囲の1回目
        if entry.selection_present():
            prev_idxs = (entry.index('sel.first'), entry.index('sel.last'))
            prev_chars = old[prev_idxs[0]: prev_idxs[1]]
            return True
        # 2回目(通常)
        else:
            if 検証 True:
                prev_idxs, prev_chars = (), ()
                return True
            elif 検証 False:
                # 復元
                entry.insert(idx, prev_chars)
                entry.selection_range(selected_idxs[0], selected_idxs[1])
                prev_idxs, prev_chars = (), ()
                return False
    
[/code]

現状はこんな流れのコードです


CC BY-SA 4.0
2021-10-17T03:23:12.577
83140
2021-10-21T16:51:50.570
47094
question
python python3 tkinter tk
Tkinterの検証つきEntryで選択範囲に入力するとき､事前に入力予定の文字列を呼び出したい