pygtk - 关于ListViews的问题:更新/附加值

时间:2011-02-28 11:21:02

标签: listview pygtk

我有一些关于使用ListViewListStore等的一般性问题。

我的程序包含一个ToDo列表,它是Task - 对象的列表。 Task - 对象有两个属性:titleprogress。现在,我想在ListView中显示这些待办事项列表,在第一列中显示任务的title,在第二列中显示progress

因此,我可以使用两个ListView创建一个TreeViewColumn,每个CellRendererText都有一个set_cell_data_func和一个数据函数(title)来设置相应的列文本({ {1}} - 或progress - Task - 对象的属性。

当然,任务的progress可以在另一个线程中随时间变化。因此,应更新progress-cells以显示新值。但是,如何告诉ListView Task - 对象已更改并且视图应该更新?

跟踪列表更改的最简单方法是什么?例如,新的Task - 对象被添加到ToDo列表中。我是否需要自己将新添加的Task - 对象附加到ListStore,还是有更简单的方法? ...因为我会有两个列表:原始的待办事项列表和似乎没必要的ListStore

那么在ListView中显示我的待办事项列表的最佳/最简单/最简单的方法是什么? : - )

最好的问候,
Biggie

1 个答案:

答案 0 :(得分:1)

我宁愿使用gtk.ListStore作为您的列表模型和主要\“TODO列表”数据源,一旦您更改模型中的值,您的列表视图内容应该更新,如下所示:

# 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')

如果您需要跟踪模型字段的更改,请连接到“row-changed”信号:

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)

希望这有帮助,尊重