【发布时间】:2016-06-13 01:43:22
【问题描述】:
我有一个使用 GtkTextView 和 GtkTextBuffer 的应用程序。使用以下 python 代码将行添加到缓冲区中,该代码在与主进程不同的线程中运行:
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: 断言失败:(priv->onscreen_validated)
请注意,我在第 0 行插入,因此迭代器被插入调用破坏的事实应该没有任何效果。
在失败之前它会写入 20 到 200 行。它似乎与注销文本缓冲区的边缘无关,并且滚动条按预期出现。
有什么建议吗?
【问题讨论】:
-
感谢 RBT,但我需要更多信息。我有以下方法,它在 GTK 的单独线程中运行。
标签: python gtk gtktextview