Python 验证tkinter文本小部件

Python 验证tkinter文本小部件,python,tkinter,Python,Tkinter,我正在Tkinter中开发一个简单的文本编辑器。我想在用户输入文本时验证文本小部件,以便应用样式。我无法绑定到,因为它会在按键后更新,我无法绑定到,因为当用户按下按键时,它不会触发事件,而这正是它需要的。还有别的办法吗? 以下是最低限度的代码: import tkinter as tk class textEditor(tk.Frame): def __init__(self, *args, **kwargs): tk.Frame.__init__(self, *arg

我正在Tkinter中开发一个简单的文本编辑器。我想在用户输入文本时验证文本小部件,以便应用样式。我无法绑定到
,因为它会在按键后更新,我无法绑定到
,因为当用户按下按键时,它不会触发事件,而这正是它需要的。还有别的办法吗?
以下是最低限度的代码:

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()
将tkinter作为tk导入
类文本编辑器(tk.Frame):
定义初始化(self,*args,**kwargs):
tk.Frame.\uuuu init\uuuuu(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(“,lambda事件:self.keyPress())
self.text.focus()
def按键(自动):
#当按下某个键时,不会调用此命令
打印(self.text.get(“end-2c”、“end-1c”))
root=tk.tk()
root.title(“文本编辑器测试”)
t=文本编辑器(根)
t、 包()
root.mainloop()

我能够通过简单地将
绑定到
tk.Text
小部件来实现这一点(虽然我按照指定的相同顺序进行了
绑定,但我认为这不会有什么区别)

现在我不能说这是一个好的解决方案还是一个好的实践,但它确实起到了作用

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()
将tkinter作为tk导入
类文本编辑器(tk.Frame):
定义初始化(self,*args,**kwargs):
tk.Frame.\uuuu init\uuuuu(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(“,lambda事件:self.keyPress())
self.text.bind(“,lambda事件:self.keyPress())
self.text.focus()
def按键(自动):
打印(self.text.get(“end-2c”、“end-1c”))
root=tk.tk()
root.title(“文本编辑器测试”)
t=文本编辑器(根)
t、 包()
root.mainloop()

这是否意味着您基本上想要这两种功能?i、 e.即使在按键后,也应在按住或松开按键后触发验证?如果是的话,这是很有可能的,我相信。@PSSolanki我希望它在按键时(而不是在按键后)按下。Keyrelease修复了第一个问题,但导致了第二个问题。现在写一个答案:)