1

我想知道是否有一种方法可以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 字符。

我想要的功能是这样的:

如果用户输入“你好”

输出应该是

h              #after h typed
he             #after he typed 
hel            #etc
hell
hello

目前正在打印

#after h typed
h             #after he typed
he            #etc
hel
hell
4

1 回答 1

3

__inserted您可能会发现在传递给您的方法的参数中找到了丢失的数据。GtkTextBuffer对象的信号默认处理程序似乎insert_text负责将文本插入缓冲区,并且您的信号处理程序事先运行。

解决此问题的两种可能方法是:

  1. 用于connect_after连接您的信号处理程序。这将在默认处理程序之后运行。

  2. 如果您只想在每次更改后访问整个缓冲区的数据,请考虑改用changed信号。这在下一个文本插入缓冲区后发出,并且还会通知您删除。

于 2012-10-15T08:01:46.753 回答