私はGtkTextViewとGtkTextBufferを使っているアプリケーションを持っています。線は、メイン処理とは別のスレッドで実行される次のPythonコードをバッファに追加される: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テキストメッセージのキューです。
アプリケーションは、しばらくの間、動作しますが、その後、必ず、私はライン0に挿入しています、次のエラー
Gtk:ERROR:gtktextview.c:4328:gtk_text_view_validate_onscreen: assertion failed: (priv->onscreen_validated)
ノートでクラッシュし、そのイテレータが挿入呼び出しによって破壊されたという事実は全く影響を与えないはず。
失敗する前に20行から200行の間に書き込みます。テキストバッファの端を書き去ることには関係しておらず、スクロールバーは期待どおりに表示されます。
提案がありますか?
RBTありがとうございますが、さらに詳しい情報が必要です。私はGTKから別のスレッドで実行される以下のメソッドを持っています。 –