python - 当用户在 gtk.TextBuffer 中输入时获取文本

标签 python gtk gtk-textbuffer

我想知道是否有一种方法可以在用户键入时从 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 信号的默认处理程序似乎负责将文本插入缓冲区,并且您的信号处理程序会提前运行。

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

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

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

关于python - 当用户在 gtk.TextBuffer 中输入时获取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12890871/

相关文章:

gtk - 如何在 Linux 上使 gtkwindow 背景透明?

python - gtk 文本 itters 的问题

python - 如何从python中删除某个IE cookie?

python - pygtk全局标签样式

python - django 添加占位符文本到表单字段

c++ - libsigc 如何包含在 gtkmm 项目中?

c++ - 从 GTKMM 2.4 移动到 GTK3.0 时 Gtk::TextView::modify_font 出现问题

python - 从 IP 字符串转换为整数,并在 Python 中向后转换

python - deque.popleft() 和 list.pop(0)。有性能差异吗?