GTK +3 TextView应用程序崩溃

1 python gtk gtktextview

我有一个使用GtkTextView和GtkTextBuffer的应用程序。使用以下python代码将行添加到缓冲区,这些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()  
Run Code Online (Sandbox Code Playgroud)

aLogQueue是一行ASCII文本消息的队列。

该应用程序运行了一段时间,但随后始终由于以下错误而崩溃

Gtk:ERROR:gtktextview.c:4328:gtk_text_view_validate_onscreen:断言失败:(priv-> onscreen_validated)

请注意,我在第0行进行插入,因此迭代器被insert调用破坏的事实不起作用。

它在失败前写入20至200行。它似乎与注销文本缓冲区的边缘无关,并且在期望时会出现滚动条。

有什么建议么?

and*_*abs 5

您不能从单独的线程访问GtkTextBuffer或GTK +的任何部分。您必须从GUI线程访问它。您将需要使用GLib.idle_add()GUI线程上的缓冲区更新排队。