如何解决tkinter的文本小部件插入方法不起作用
我一直在开发一个应用程序,在该应用程序中我想自动完成诸如方括号圆形卷曲正方形之类的内容。我使用tkinter的insert方法,将document.querySelectorAll(".like-btn").forEach(el => el.addEventListener("click",() => {
count++
el.innerText = count
console.log(el)
}))
常量作为索引,如下所示:
tk.INSERT
这是一个文本小部件内的函数,其中的init附加了以下绑定:
def autocomplete(self,val) :
if val == '(' :
self.insert(tk.INSERT,')')
elif val == '{' :
self.insert(tk.INSERT,'}')
elif val == '[' :
self.insert(tk.INSERT,']')
elif val == '\'' :
self.insert(tk.INSERT,'\'')
self.mark_set('sentinel',str(float(self.index(tk.INSERT)) - 0.1))
elif val == '\"' :
self.insert(tk.INSERT,'\"')
self.mark_set('sentinel',str(float(self.index(tk.INSERT)) - 0.1))
elif val == ':' :
text = self.get(1.0,tk.INSERT).strip().replace(' ','')
if text[(text.index(':') - 1) : text.index(':')] == ')' :
self.insert(tk.INSERT,'\n\t')
return
当我键入任何类似的内容时,例如括号,然后显示输出有些不正确。
self.bind('(',lambda x : self.autocomplete('('))
self.bind('{',lambda x : self.autocomplete('{'))
self.bind('[',lambda x : self.autocomplete('['))
self.bind(':',lambda x : self.autocomplete(':'))
self.bind('\'',lambda x : self.autocomplete('\''))
self.bind('\"',lambda x : self.autocomplete('\"'))
您看到我希望另一个括号出现在末尾,但不要出现。
解决方法
这是因为绑定是在将字符插入文本小部件之前触发的。要解决此问题,您可以绑定到“ ..
需要用键盘符号代替。
self.bind('<KeyRelease-parenleft>',lambda x : self.autocomplete('('))
self.bind('<KeyRelease-braceleft>',lambda x : self.autocomplete('{'))
self.bind('<KeyRelease-bracketleft>',lambda x : self.autocomplete('['))
self.bind('<KeyRelease-colon>',lambda x : self.autocomplete(':'))
self.bind('<KeyRelease-apostrophe>',lambda x : self.autocomplete('\''))
self.bind('<KeyRelease-quotedbl>',lambda x : self.autocomplete('\"'))
特殊字符的键符在所有操作系统上并不总是相同的,因此,这里有一个技巧可以找到系统上任何键的键符:
import tkinter as tk
root = tk.Tk()
root.bind('<Key>',lambda ev: print(ev.keysym))
root.mainloop()
只需按键就可以得到按键符号
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。