Python Tkinter keyrelease事件在按键未按下时插入新行';T
在下面的代码中,如果我使用Python Tkinter keyrelease事件在按键未按下时插入新行';T,python,tkinter,Python,Tkinter,在下面的代码中,如果我使用keyrease绑定事件,那么点击return键会在文本小部件中产生不需要的新行。但是,如果我使用按键绑定事件,则不会插入新行 有人能解释一下这两种行为之间的区别,以及我为什么观察到这种行为吗。如有任何参考资料,将不胜感激 from Tkinter import * def getCommand(*args): global text text.insert(END, "\n") text.insert(END, "command>")
keyrease
绑定事件,那么点击return
键会在文本小部件中产生不需要的新行。但是,如果我使用按键
绑定事件,则不会插入新行
有人能解释一下这两种行为之间的区别,以及我为什么观察到这种行为吗。如有任何参考资料,将不胜感激
from Tkinter import *
def getCommand(*args):
global text
text.insert(END, "\n")
text.insert(END, "command>")
return 'break'
def handle_keyrelease(event):
if event.keysym == "Return":
getCommand()
return 'break'
root = Tk()
text = Text(root)
text.pack()
text.insert(END,"command>")
text.focus()
text.bind("<KeyRelease>", handle_keyrelease) # Change the event handler to see the difference
root.mainloop()
从Tkinter导入*
def GETCOMAND(*参数):
全局文本
文本。插入(结束,“\n”)
text.insert(结束,“命令>”)
返回“中断”
def句柄_钥匙释放(事件):
如果event.keysym==“Return”:
getCommand()
返回“中断”
root=Tk()
text=文本(根)
text.pack()
text.insert(结束,“命令>”)
text.focus()
text.bind(“,handle_keyrease)#更改事件处理程序以查看差异
root.mainloop()
当敲击并释放文本小部件上的键时,
被提升,然后文本小部件被更新,然后
被提升。使用一个处理这两个事件的小演示程序,您可以自己轻松地验证这一点
当绑定到
时,通过从事件处理程序函数返回字符串“break”
,可以防止事件传播到其他处理程序(以及更新文本小部件的处理程序)
如果绑定到
,则阻止插入换行已经太晚了,因为此时文本已经更新
请注意,在您的示例中,您还可以处理
或只处理
,而不是检查event.keysym==“Return”