Python 为什么Entry.get()后面有一个键?
考虑以下代码:Python 为什么Entry.get()后面有一个键?,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,考虑以下代码: #!/usr/bin/env python3 from tkinter import * from tkinter.ttk import * root = Tk() entry = Entry(root) entry.bind('<Key>', lambda e: print(entry.get())) entry.grid() Button(text="Close", command=root.destroy).grid() root.mainloop()
#!/usr/bin/env python3
from tkinter import *
from tkinter.ttk import *
root = Tk()
entry = Entry(root)
entry.bind('<Key>', lambda e: print(entry.get()))
entry.grid()
Button(text="Close", command=root.destroy).grid()
root.mainloop()
以下是印刷品
Pytho
我试图实时监控入口小部件 Steven对此问题的回答提供了一种比绑定所有键更好的方法: 使用
Tkinter.StringVar
跟踪条目小部件的值。您可以通过设置跟踪来验证StringVar
的值
如果有人需要,下面是修改为使用StringVar
的原始示例代码:
#!/usr/bin/env python3
from tkinter import *
from tkinter.ttk import *
root = Tk()
text_var = StringVar()
entry = Entry(root, textvariable=text_var)
text_var.trace('w', lambda nm, idx, mode: print(text_var.get()))
entry.grid()
Button(text="Close", command=root.destroy).grid()
root.mainloop()
我试图实时监控入口小部件
Steven对此问题的回答提供了一种比绑定所有键更好的方法:
使用Tkinter.StringVar
跟踪条目小部件的值。您可以通过设置跟踪来验证StringVar
的值
如果有人需要,下面是修改为使用StringVar
的原始示例代码:
#!/usr/bin/env python3
from tkinter import *
from tkinter.ttk import *
root = Tk()
text_var = StringVar()
entry = Entry(root, textvariable=text_var)
text_var.trace('w', lambda nm, idx, mode: print(text_var.get()))
entry.grid()
Button(text="Close", command=root.destroy).grid()
root.mainloop()
问题的标题是“为什么Entry.get()后面有一个键?”
简单的回答是:在小部件上创建的任何绑定都发生在将字符插入小部件的默认行为之前。原因是您可能希望更改或阻止默认行为,如果绑定在发生后触发,这是不可能的(您可以撤消默认行为,但无法阻止它)
有一个适当的解决办法。答案很长,答案如下:(来自问题)。更多信息在这个答案中:(来自问题)问题的标题是“Entry.get()为什么落后一个键?”
简单的回答是:在小部件上创建的任何绑定都发生在将字符插入小部件的默认行为之前。原因是您可能希望更改或阻止默认行为,如果绑定在发生后触发,这是不可能的(您可以撤消默认行为,但无法阻止它)
有一个适当的解决办法。答案很长,答案如下:(来自问题)。在这个stackoverflow答案中有更多的信息:(来自问题)我不知道TKinter,所以我不知道参数是什么,但似乎您需要e.get()
在这个lambda中。@DanielRoseman不,e
是一个伪变量,因为当启动绑定事件时,事件信息会传递给函数,在本例中为e
。在这种情况下,它没有用使用
事件而不是
。我不知道TKinter,所以我不知道参数是什么,但似乎在该lambda中需要e.get()
。@DanielRoseman不,e
是一个伪变量,因为启动绑定事件时,事件信息会传递给函数,在本例中为e
。在这种情况下,它没有用使用
事件而不是
。这并不能回答为什么的问题,它只提供了一种解决方法。这很有用,但它并没有真正回答问题。@BryanOakley“我怀疑这是因为entry.get()是在将键添加到输入框之前运行的。有办法解决这个问题吗?”是的,tkinter绑定系统非常强大。有关更多信息,请参阅,这并没有回答“为什么”
“的问题,它只提供了一种解决方法。这很有用,但它并没有真正回答问题。@BryanOakley“我怀疑这是因为entry.get()是在将键添加到输入框之前运行的。有办法解决这个问题吗?”是的,tkinter绑定系统非常强大。有关更多信息,请参阅和