Tkinter代码编辑器自动闭合括号异常:括号先于输入字符插入
解决Tkinter文本框自动闭合括号插入顺序问题
问题出在事件绑定的时机:你用的<KeyPress-a>会在系统将字符'a'插入文本框之前触发,所以你的代码先插入了')',随后系统才插入'a',导致顺序颠倒。
给你两种可行的解决方法:
方案一:改用
KeyRelease事件绑定
这个事件会在系统完成'a'的插入后触发,自然就能保证顺序正确:# bracket open and close def bo(event): # 插入到当前光标位置,而非文本末尾 self.st.insert(INSERT, ")") return self.st.bind('<KeyRelease-a>', bo)方案二:手动控制插入逻辑并阻止默认行为
适合后续扩展成对括号的光标定位(比如输入左括号后光标自动移到中间),灵活性更高:# bracket open and close def bo(event): # 获取当前光标位置 current_pos = self.st.index(INSERT) # 插入目标字符和闭合括号 self.st.insert(current_pos, "a)") # 将光标定位到字符与括号之间 self.st.mark_set(INSERT, f"{current_pos}+1c") # 返回"break"阻止系统默认的字符插入动作 return "break" self.st.bind('<KeyPress-a>', bo)
另外注意:用INSERT代替END作为插入位置,这样在文本中间输入时,括号会跟随光标位置插入,而不会跑到文本末尾。
内容的提问来源于stack exchange,提问作者Chiz
相关产品推荐
相关产品推荐

