[英]get() method of Tkinter text widget - doesn't return the last character
我正在Tkinter中编写一些GUI程序。 我正在尝试使用Text.get()方法来跟踪Text小部件的内容。
我听说我可以get(1.0,'end')来将当前内容写在小部件上,但是它不提供我键入的最新字符。
这是我写的一个简单示例:
import Tkinter as tk
class TestApp(tk.Text, object):
def __init__(self, parent = None, *args, **kwargs):
self.parent = parent
super(TestApp, self).__init__(parent, *args, **kwargs)
self.bind('<Key>', self.print_contents)
def print_contents(self, key):
contents = self.get(1.0, 'end')
print '[%s]' % contents.replace('\n', '\\n')
if __name__ == '__main__':
root = tk.Tk()
app = TestApp(root, width = 20, height = 5)
app.pack()
root.mainloop()
如果输入“ abcd”,它将显示“ abc \\ n”,而不是“ abcd \\ n”。 (“ \\ n”由“文本”小部件自动添加到最后一行之后。)
如何获得“ abcd \\ n”而不是“ abc \\ n”?
[解决了]
感谢Bryan Oakley和Yasser Elsayed ,我通过替换解决了问题
self.bind('<Key>', self.print_contents)
到以下内容:
self.bind('<KeyRelease>', self.print_contents)
这是由于事件处理程序的时间安排,事件处理程序会在事件发生后立即执行,这意味着“文本”小部件尚没有机会真正获得键入的键。 您在此处有两个选择,或者只是将在事件处理程序中获得的key
参数附加到Text.get()
结果中,或者将其绑定到<KeyRelease-A>
,例如,如果您正在侦听特定的key(在本例中为A
案件)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.