1

Tk Text ウィジェットのバインディングを作成して、ユーザーを制限して、行の最初の文字を削除できないようにしようとしています (文字は、ターミナルのような一種のプロンプトとして機能します)。

私がこれをほぼ達成している方法は次のとおりです。

bind .text <BackSpace> {
    if{[.text index insert] == [.text index {insert linestart+1c}]} {
        break;
    }
}

ユーザーが行の最初の文字を削除できないようにするという点で機能しますが、何らかの理由で、ユーザーが行の9番目の文字を削除することもできなくなります! 例えば:

>hello world!

その行の終わりから今バックスペースを押すと、まで削除されます

こんにちは

そしてストップ!左矢印を押して「r」の後の次の文字に移動し、削除を続けると、ニンジンが削除されません。これが起こるべき理由はわかりません。誰かが私の間違いを指摘するか、私が望むものを達成するためのより良い方法を教えてくれたら、それは素晴らしいことです.

4

1 に答える 1

3

停止した時点で[.text index insert]、 のインデックスを1.10与え[.text index {insert linestart+1c}]、 のインデックスを与えます1.1

これらは数値的に同等であり、==可能な限り同等の数値を使用したいと考えています。

修正はcompare、おそらく次のように、テキスト ウィジェットのメソッドを使用することです。

bind .text <BackSpace> {
    if {[.text compare insert == {insert linestart+1c}]} {
        break
    }
}

(おそらく、保持したいテキストにタグを設定し、削除するテキストのいずれかにタグがあるかどうかを削除する前に確認するなど、全体的な目標を別の方法で実行する方が実際には良いと思います。しかし、それは非常に異なりますアプローチ。)

于 2014-07-10T20:52:18.543 に答える