При работе с GTK вы должны избегать многопоточности.В этом случае это можно решить с помощью GLib.timeout_add
.
Заменить:
t = threading.Thread(target=self._blink, args=(tree_model[treepath],))
t.daemon = True
t.start()
На:
GLib.timeout_add(1000, self._blink_glib, tree_model[treepath])
def _blink_glib(self, path):
for i in range(3, 6):
if path[i] == "white":
path[i] = "green"
else:
path[i] = "white"
return True
Обратный вызов должен вернуть True
впродолжай или False
чтобы остановиться.Таким образом, вам все еще нужно реализовать флаг, чтобы указать, выполнены ли 100 итераций.
Еще одно замечание: если все столбцы будут мигать одинаковым цветом, для создания трех дополнительных элементов древовидного хранилища не требуется, достаточно одногои укажите все три столбца cell_background
на этот элемент.
column_1 = Gtk.TreeViewColumn("Col1", renderer_col1, text=0, cell_background=3)
column_2 = Gtk.TreeViewColumn("Col2", renderer_col2, text=0, cell_background=3)
column_3 = Gtk.TreeViewColumn("Col3", renderer_col3, text=0, cell_background=3)
def _blink_glib(self, path):
path[3] = "green" if path[3] == "white" else "white"
return True