Python gtk文本编辑器的问题

Python gtk文本编辑器的问题,python,gtk,pygtk,gtk-textbuffer,Python,Gtk,Pygtk,Gtk Textbuffer,我有一个应用程序,我正在使用gtk用python编写,我希望它能自动关闭括号,并将光标放在括号之间。问题是我随机出现以下错误,导致程序崩溃: ./mbc.py:266: GtkWarning: Invalid text buffer iterator: either the iterator is uninitialized, or the characters/pixbufs/widgets in the buffer have been modified since the it

我有一个应用程序,我正在使用gtk用python编写,我希望它能自动关闭括号,并将光标放在括号之间。问题是我随机出现以下错误,导致程序崩溃:

    ./mbc.py:266: GtkWarning: Invalid text buffer iterator: either the iterator is 
uninitialized, or the characters/pixbufs/widgets in the buffer have been modified since
 the iterator was created.
    You must use marks, character numbers, or line numbers to preserve a position across
 buffer modifications.
    You can apply tags and insert marks without invalidating your iterators,
    but any mutation that affects 'indexable' buffer contents (contents that can be 
referred to by character offset)
    will invalidate all outstanding iterators
      buff.place_cursor(buff.get_iter_at_line_offset(itter.get_line(),Iter.get_offset()-1))
    ./mbc.py:266: GtkWarning: gtktextbtree.c:4094: char offset off the end of the line
      buff.place_cursor(buff.get_iter_at_line_offset(itter.get_line(),Iter.get_offset()-1))

    Gtk-ERROR **: Char offset 568 is off the end of the line
    aborting...
    Aborted
该区域的代码如下:

def insert_text(self, buff, itter, text, length):
    if text == '(':
        buff.insert_at_cursor('()') 
        mark = buff.get_mark('insert')
        Iter = buff.get_iter_at_mark(mark)
        buff.place_cursor(buff.get_iter_at_line_offset(itter.get_line(),Iter.get_offset()-1))

有人能告诉我如何修复这个错误吗?我找不到任何其他方法将光标放在括号“

之间的特定位置,
insert\u at\u cursor
调用会使传递给函数的迭代器无效。当您返回到最后一行的迭代器时,GTK+显示一条警告。此行为在中进行了解释

解决此问题需要不重新使用迭代器,例如:

buff.insert_at_cursor(')')  # This invalidates existing iterators.
mark = buff.get_mark('insert')
iter = buff.get_iter_at_mark(mark)  # New iterator
iter.backward_cursor_positions(1)
buff.place_cursor(iter)
(免责声明:我已经很长时间没有使用GTK+文本小部件了。可能有一种更简单/更优雅的方法来做同样的事情,但这一种就可以了。)