问题描述
我试图在"(),"
中单击按钮或键盘快捷键后插入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
中的其他位置,则它将"(),"
插入到行的开头而不是结尾。
任何帮助将不胜感激。
解决方法
我认为可能存在两个问题。首先,“当前”是指鼠标的位置,而不是插入光标。尚不清楚这是否是您真正打算使用的。当鼠标不在窗口小部件上时,索引将指向鼠标离开窗口小部件边界之前在窗口小部件上的最后位置。
行为应该是,如果将鼠标移到右侧的文本小部件之外,则文本将插入到行的结尾处,该行的结尾靠近鼠标越过边缘的位置。如果将鼠标移到文本的左侧,则文本将插入到最靠近鼠标越过边缘的行的开头。
第二,您没有正确计算行和列。您正在将列设置为索引的第一部分,将行设置为索引的第二部分。你已经扭转了。第一部分之前的“。”代表行号,“。”后面的第二部分。代表列号。
您需要像这样计算线条和字符:
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))