У меня Gtk.ScrolledWindow()
внутри Gtk.TextView()
, (я использую интроспекцию PyGObject).
После того, как я вставил текст и произвел автопрокрутку из другого потока, несколько раз вызывая методappend_text
, я получаю пару предупреждений, а затем GUI падает.
Это неприятная часть моего кода:
class TextViewWindow(Gtk.Window):
[...]
def append_text(self, text):
self.textbuffer.insert(self.textbuffer.get_end_iter(), text)
self.scroll_to_end()
def scroll_to_end(self):
self.textbuffer.place_cursor(self.textbuffer.get_end_iter())
insert_mark = self.textbuffer.get_insert()
self.textview.scroll_to_mark(insert_mark , 0.0, True, 0.0, 1.0)
Кто-нибудь знает, что я делаюнеправильно?
-
Вот некоторые из ошибок, которые я получил:
Gtk-WARNING **: Неверный итератор текстового буфера: либо итераторнеинициализированы, или символы / pixbufs / виджеты в буфере были изменены с момента создания итератора.Вы должны использовать метки, номера символов или номера строк, чтобы сохранить положение между изменениями буфера.Вы можете применять теги и вставлять метки, не делая недействительными ваши итераторы, но любая мутация, которая влияет на «индексируемое» содержимое буфера (содержимое, на которое можно ссылаться смещением символов), сделает недействительными все ожидающие итераторы
Pango-CRITICAL **:pango_layout_index_to_pos: утверждение `layout! = NULL 'не удалось
Gtk-WARNING **: gtktextview.c: 4813: каким-то образом были изменены некоторые текстовые строки или произошла прокрутка с момента последней проверки строк на экране - это может бытьошибка текстового виджета.
Gtk: ОШИБКА: gtktextview.c: 4814: gtk_text_view_paint: код не должен быть достигнут