Я бы предпочел использовать gtk.ListStore в качестве модели списка и первичного \ только источника данных "TODO list", как только вы измените значения в модели, содержимое вашего списка должно быть обновлено, что-то вроде этого:
# get first row of the list store
iter = self.model.get_iter_first()
# set new values to the first column
self.model.set_value(iter, 1, 'new value')
# set new values to columns 0 and 1
self.model.set(iter, 0, 'new 0', 1, 'new 1')
если вам нужно отслеживать изменения в полях модели, подключитесь к сигналу " строка-измененный ":
self.model.connect("row-changed", self.on_model_changed, 0)
...
def on_model_changed(self, treemodel, path, iter, user_param1):
print 'model_changed ' + treemodel.get_value(iter, 0)
надеюсь, это поможет, с уважением