У меня есть приложение, использующее GtkTextView и GtkTextBuffer. Строки добавляются в буфер с помощью следующего кода питона, который работает в отдельном потоке от основного процесса:Gtk +3 Сбой приложений TextView
while True:
if aLogQueue.qsize() > 0:
aBuffer = aLogTextView.get_buffer()
try:
newLogMessage = aLogQueue.get_nowait()
ipri = int(newLogMessage[0])
if(ipri>=self.ListenLogMinPr):
aniter = aBuffer.get_iter_at_line(0)
aBuffer.insert(aniter, newLogMessage)
#mark = aBuffer.get_mark('insert')
#aniter = aBuffer.get_iter_at_mark(mark)
#aBuffer.place_cursor(aniter)
pass
except:
print('threw exception in message loop')
self.gui_shutdown()
aLogQueue выстраивается очередь из одной строки ASCII текстовых сообщений.
Приложение работает на некоторое время, но затем неизменно падает со следующей ошибкой
Gtk:ERROR:gtktextview.c:4328:gtk_text_view_validate_onscreen: assertion failed: (priv->onscreen_validated)
Следует заметить, что я вставив в строке 0, поэтому тот факт, что итераторы уничтожаются при вызове вставки не должен иметь никакого эффекта ,
Он записывает от 20 до 200 строк перед сбоем. Похоже, что это не связано с записью границы текстового буфера, и полосы прокрутки появляются, когда ожидается.
Любые предложения?
Спасибо RBT, но мне нужна дополнительная информация. У меня есть следующий метод, который запускается в отдельном потоке из GTK. –