You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

说明

  1. 先通过self.st.index(INSERT)获取用户输入左括号后的当前光标位置
  2. 在该位置插入右括号,此时默认光标会跳到右括号后方
  3. 调用mark_set方法将INSERT标记设回原位置,让光标停在两个括号中间
  4. 返回"break"是为了阻止Tkinter默认的按键释放事件处理,避免系统自动调整光标位置导致效果失效

内容的提问来源于stack exchange,提问作者Chiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 23:06:27