Использование Python3 с gi.repository.Gtk
, я пытаюсь отобразить несколько текстовых строк внутри GtkTextView
через GtkTextBuffer
.Python3 gi: дамп ядра ядра GtkTextBuffer
В принципе, я динамически добавлять строки с использованием _addLine
метода, который обновляет текстовый буфер таким образом (self._lines
является массивом и self._textBuffer
является GtkTextBuffer
):
def _addLine(self, text):
if len(self._lines) == self._maxLines:
self._lines = self._lines[1:]
self._lines.append(text)
content = '\n'.join(self._lines)
print("TIC: %d" % len(content))
self._textBuffer.set_text(content)
print("TAC")
К сожалению, при случайных значениях i
(либо ниже, либо больше, чем self._maxLines
), я случайно получаю дамп ядра между «TIC» и «TAC», поэтому, когда я пытаюсь установить содержимое буфера.
Этот метод вызывается в резьбе, сам вызывается из конструктора (после того, как все элементы графического интерфейса инициализирован):
def _startUpdateThread(self):
thread = threading.Thread(target=lambda: self._updateLoop())
thread.daemon = True
thread.start()
def _updateLoop(self):
i=0
for l in listings.tail(self._logFile, follow=True, n=1000):
i+=1
print("i=%d, nLines=%d" % (i, len(self._lines)))
self._addLine(l)
Я использую строитель Поляны структурированную, как показано ниже:
GtkWindow
- GtkVBox
- GtkScrolledWindow
- GtkTextView (linked to GtkTextBuffer)
- GtkButton (to close the window)
- GtkTextBuffer
Что я сделал не так? В чем причина этого дампа ядра?
Большое спасибо за помощь.
Большое спасибо @ elya5 я должен был установить, что внутри 'updateLoop' вместо' внутри addLine', чтобы сделать его работу. –