pygtk - вопросы о ListViews: обновление / добавление значений - PullRequest
0 голосов
/ 28 февраля 2011

У меня есть несколько общих вопросов об использовании ListView s и ListStore s и т. Д.

Моя программа содержит ToDo-список, который представляет собой список Task -объектов.* Task -объект имеет два атрибута: title и progress.Теперь я хочу отобразить этот список задач в ListView, показывая title задачи в первом столбце и progress во втором столбце.

Так что я мог бы создать ListViewс двумя TreeViewColumn с, каждый с CellRendererText и функцией данных (set_cell_data_func) для установки соответствующего столбца-текста (title - или progress -атрибут Task -объекта).

Конечно, progress задачи может со временем меняться в другом потоке.Таким образом, ячейки прогресса должны быть обновлены, чтобы показать новое значение.Но как я могу сообщить ListView, что Task -объект изменился и представление должно быть обновлено?

И каков самый простой способ отслеживать изменения списка?Например, новый Task -объект добавляется в ToDo-список.Нужно ли мне добавлять новый добавленный Task -объект к ListStore самостоятельно или есть более простой способ?... потому что у меня было бы два списка: оригинальный ToDo-список и ListStore, который кажется ненужным.

Так, каков самый лучший / самый простой / самый простой способ показать мой ToDo-список вListView?: -)

С уважением,
Бигги

1 Ответ

1 голос
/ 02 марта 2011

Я бы предпочел использовать 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)

надеюсь, это поможет, с уважением

...