我想知道是否有一种方法可以在用户键入时从 TextBuffer
打印输入。
我尝试过使用 insert_text
信号,但它似乎打印出了后面一个字符的输入。
到目前为止我已经
self.__buffer.connect('insert_text', self.__inserted)
def __inserted(self, widget, iter, string, length):
print self.__buffer.get_text(self.__buffer.get_start_iter(),self.__buffer.get_end_iter())
上面的代码打印出实际输入内容后面的缓冲区 1 个字符。
我想要的功能是这样的:
如果用户输入“hello”
输出应该是
h #after h typed
he #after he typed
hel #etc
hell
hello
目前正在打印
#after h typed
h #after he typed
he #etc
hel
hell
最佳答案
您可能会发现在传递给 __inserted
方法的参数中找到了丢失的数据。 GtkTextBuffer
对象的 insert_text
信号的默认处理程序似乎负责将文本插入缓冲区,并且您的信号处理程序会提前运行。
解决此问题的两种可能方法是:
使用
connect_after
连接信号处理程序。这将在默认处理程序之后运行。如果您只想在每次更改后访问整个缓冲区的数据,请考虑使用
changed
信号。这是在下一个文本插入缓冲区后发出的,并且还会通知您删除。
关于python - 当用户在 gtk.TextBuffer 中输入时获取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12890871/