我有一些关于使用ListView
和ListStore
等的一般性问题。
我的程序包含一个ToDo列表,它是Task
- 对象的列表。 Task
- 对象有两个属性:title
和progress
。现在,我想在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
答案 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)
希望这有帮助,尊重