Tkinter文本小部件的get()方法 - 不返回最后一个字符

时间:2016-05-08 07:27:44

标签: python tkinter widget

我在 Tkinter 中编写了一些GUI程序。我尝试使用 Text.get()方法跟踪Text小部件的内容。
我听说我可以得到(1.0,&#39;结束&#39;)来获取小部件上写的当前内容,但它并没有提供我输入的最新字符。< / p>

这是我写的一个简单例子:

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

如果我输入&#39; abcd&#39;,则会打印&#39; abc \ n&#39;,而不是&#39; abcd \ n&#39;。 (&#39; \ n&#39;在文本小部件的最后一行之后自动添加。)

example

我怎样才能获得abcd \ n&#39;而不是&#39; abc \ n&#39;?

[解决]

感谢 Bryan Oakley Yasser Elsayed ,我通过替换解决了这个问题

self.bind('<Key>', self.print_contents)

以下内容:

self.bind('<KeyRelease>', self.print_contents)

example2

1 个答案:

答案 0 :(得分:2)

这是由于事件处理程序的时间安排,它会在事件发生后立即执行,这意味着Text小部件实际上无法实际获取键入的键。这里有两个选项,只需将事件处理程序中的key参数附加到Text.get()结果,或绑定到<KeyRelease-A>,例如,如果您正在侦听特定键(在这种情况下为A)。