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 は、1 行の ASCII テキスト メッセージのキューです。
アプリケーションはしばらく動作しますが、次のエラーで必ずクラッシュします
Gtk:ERROR:gtktextview.c:4328:gtk_text_view_validate_onscreen: アサーションに失敗しました: (priv->onscreen_validated)
0 行目に挿入しているので、イテレータが挿入呼び出しによって破棄されても効果がないことに注意してください。
失敗する前に 20 ~ 200 行を書き込みます。これは、テキスト バッファの端から書き出すこととは関係がないようで、予期したときにスクロール バーが表示されます。
助言がありますか?