0

我试图"(),"在单击按钮或键盘快捷键后插入Text,然后将光标移动到括号中,如下所示(|),。这是代码的相关部分。

def addParentheses(event = None):
    key_text.focus_set()
    key_text.insert('current', '(),')
    pos = key_text.index('current')
    col = int(pos.split('.')[0])
    row = int(pos.split('.')[1])
    key_text.mark_set('insert', "%d.%d" % (col,row-2))

仅当我的鼠标指针悬停在Text小部件上时,此代码才能按预期工作。如果我的指针在 中的其他地方Frame,它会插入"(),"到行的开头而不是结尾。任何帮助,将不胜感激。

4

1 回答 1

2

我觉得可能有两个问题。首先,“当前”是指鼠标的位置,而不是插入光标。目前尚不清楚这是否是您真正打算使用的。当鼠标不直接在小部件上时,索引将指鼠标在离开小部件边界之前在小部件上的最后位置。

行为应该是,如果您将鼠标移到右侧的文本小部件之外,则文本将插入到靠近鼠标越过边缘的行尾。如果将鼠标移到左侧文本之外,文本将插入到最靠近鼠标越过边缘的行的开头。

其次,您没有正确计算行和列。您将列设置为索引的第一部分,将行设置为第二部分。你把它反过来了。“。”之前的第一部分。代表行号,“.”后面的第二部分 表示列号。

您需要像这样计算行和字符:

pos = key_text.index('current')
line = int(pos.split('.')[0])
char = int(pos.split('.')[1])
key_text.mark_set('insert', "%d.%d" % (line,char-2))
于 2020-08-26T05:21:01.773 回答