[英]Validate tkinter text widget
我正在 Tkinter 中开发一个简单的文本编辑器。 我想在用户输入文本时验证文本小部件,以便可以应用样式。 我无法绑定到<KeyPress>
因为它在按下键后更新,我无法绑定到<KeyRelease>
因为当用户按住键时它不会触发事件,这是它需要的。 有没有其他办法解决这个问题?
这是最小的代码:
import tkinter as tk
class textEditor(tk.Frame):
def __init__(self, *args, **kwargs):
tk.Frame.__init__(self, *args, **kwargs)
self.textFrm = tk.Frame(self)
self.textFrm.pack(fill = "x")
self.text = tk.Text(self.textFrm, relief = "flat", font = ("Arial","11"))
self.text.pack(fill = "both", expand = True)
self.text.bind("<KeyRelease>",lambda event: self.keyPress())
self.text.focus()
def keyPress(self):
#This is not called when a key is held down
print(self.text.get("end-2c","end-1c"))
root = tk.Tk()
root.title("Text editor test")
t = textEditor(root)
t.pack()
root.mainloop()
我能够通过简单地将<KeyRelease>
和<KeyPress>
bindings
到tk.Text
小部件来解决这个tk.Text
。(虽然我按照指定的相同顺序进行了bindings
,但我认为这不会产生影响)。
现在我不能说这是一个好的解决方案还是一个好的做法,但它确实有效。
import tkinter as tk
class textEditor(tk.Frame):
def __init__(self, *args, **kwargs):
tk.Frame.__init__(self, *args, **kwargs)
self.textFrm = tk.Frame(self)
self.textFrm.pack(fill = "x")
self.text = tk.Text(self.textFrm, relief = "flat", font = ("Arial","11"))
self.text.pack(fill = "both", expand = True)
self.text.bind("<KeyRelease>",lambda event: self.keyPress())
self.text.bind("<KeyPress>",lambda event: self.keyPress())
self.text.focus()
def keyPress(self):
print(self.text.get("end-2c","end-1c"))
root = tk.Tk()
root.title("Text editor test")
t = textEditor(root)
t.pack()
root.mainloop()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.