gpt4 book ai didi

python - Tkinter keyrelease 事件插入新行,而按键则不插入新行

转载 作者:行者123 更新时间:2023-12-01 05:37:36 26 4
gpt4 key购买 nike

在下面的代码中,如果我使用 KeyRelease 绑定(bind)事件,那么在点击 return 键时会导致文本小部件中出现不需要的新行。但是,如果我使用 KeyPress 绑定(bind)事件,则不会插入新行。

有人可以解释一下两者之间的区别以及为什么我会观察到这种行为吗?任何指向引用 Material 的指示将不胜感激。

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()

最佳答案

当按下并释放文本小部件上的键时,<KeyPress>引发,然后更新文本小部件,然后 <KeyRelease>被提出。您可以使用处理这两个事件的小演示程序自己轻松验证这一点。

绑定(bind)到 <KeyPress> 时,您可以通过返回字符串 "break" 来阻止事件传播到其他处理程序(从而更新文本小部件的处理程序)。来自您的事件处理函数。

如果您绑定(bind)到<KeyRelease> ,现在阻止插入换行符已经太晚了,因为此时文本已经更新了。

请注意,在您的示例中,您还可以处理 <KeyPress-Return>或者简单地<Return>而不是检查 event.keysym == "Return" .

关于python - Tkinter keyrelease 事件插入新行,而按键则不插入新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18565414/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com