1

我正在尝试为 Tk Text 小部件创建绑定以限制用户,因此他/她不能删除行中的第一个字符(该字符用作终端中的一种提示。)

这就是我几乎要做到这一点的方式:

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

它的工作原理是不让用户删除该行中的第一个字符,但无论出于何种原因,它也阻止用户删除该行中的第九个字符!例如:

>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 回答