Why does Entry.get() not return a string with the most recent keystroke? (tkinter, Python)
本问题已经有最佳答案,请猛点这里访问。
1 2 3 4 5 6 7 8 9 10 11 | import Tkinter as tk root = tk.Tk()` def printer(field) : print field.get() entry = tk.Entry(root) entry.pack() entry.bind("<Key>", lambda event : printer(entry)) root.mainloop() |
输入:
ABC
输出:
(空的)
一个
AB
在任何时候,它总是输出比当前输入字段中输入的文本少一个。那么,我该如何修复它呢?
我猜原因是回调出现在条目文本之前。但是,由于按下的键是作为事件传递的,因此可以手动将该信息添加到打印的字符串中。但是,这需要程序将特殊字符处理为退格符或换行符。
另一种解决方案,或者更确切地说是解决方法,——我更喜欢的一个——是定义一个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import Tkinter as tk root = tk.Tk() def printer(name, index, mode): print field_text.get() field_text = tk.StringVar() field_text.set('') field_text.trace("w", printer) entry = tk.Entry(root, textvariable=field_text) entry.pack() root.mainloop() |
因此,这里我们读取的是