Tkinter ScrolledText组件INSERT插入光标位置异常问题求助
ScrolledText组件括号补全后光标位置调整方案
开发带扩展功能的类记事本代码编辑器时,已实现括号自动补全功能,但补全后INSERT光标处于闭合括号前方,而非括号内部。Entry组件拥有icursor方法可调整光标位置,但ScrolledText组件无此方法,需要调整光标位置的解决方案。
原相关代码
#bracket open and close def bo(event): self.st.insert(END, ")") #code to make insert cursor move back return self.st.bind('<KeyRelease-(>', bo)
解决方案
ScrolledText组件可以通过mark_set方法结合INSERT标记来调整光标位置,修改后的代码如下:
#bracket open and close def bo(event): # 获取当前光标位置 current_pos = self.st.index(INSERT) # 在当前位置插入闭合括号 self.st.insert(current_pos, ")") # 将光标移动到闭合括号内部 self.st.mark_set(INSERT, current_pos) return "break" self.st.bind('<KeyRelease-(>', bo)
说明
- 先通过
self.st.index(INSERT)获取用户输入左括号后的当前光标位置 - 在该位置插入右括号,此时默认光标会跳到右括号后方
- 调用
mark_set方法将INSERT标记设回原位置,让光标停在两个括号中间 - 返回
"break"是为了阻止Tkinter默认的按键释放事件处理,避免系统自动调整光标位置导致效果失效
内容的提问来源于stack exchange,提问作者Chiz
相关产品推荐
相关产品推荐

