我正在尝试在不同的列上显示对象的属性 Gtk.TreeView
。假设我有以下内容:
class MyClass(GObject.GObject):
def __init__(self, first, last, age):
self.first = first
self.last = last
self.age = age
我希望将实例存储在 Gtk.ListStore
中,如下所示。
store = Gtk.ListStore(MyClass)
现在,在创建
Gtk.TreeView
时,我不知道如何指定必须呈现2列,一列用于first
属性,另一列用于age
属性。view = Gtk.TreeView(model=store)
# Columns for first and age added here
...
这些帖子(1)和(2)有些解释如何使用自定义类型,但仅使用1列(然后
store
中的列数与view
中的列数相匹配)。听起来我正在尝试的事情是一件常见的事情,不需要任何解决方法。也许这与子类化Gtk.ListStore
有关,使其告诉view
它有几列以及如何获取每个值?此外,我如何使在
store
中的MyClass实例的更改自动通知并反映在view
上?
self.first = "John"
等。当前版本是无操作的。 - user4815162342do_*()
函数:它们实现了TreeModel。您将不得不实现这些功能。 - Jussi KukkonenListStore
就可以满足他的需求,只要有一种方法从其中的对象中提取任意数据即可。奇怪命名的set_cell_data_func
正是为这个目的而有用的,而ListStore的gobject.TYPE_PYOBJECT
可以用来存储任意的Python实例。将两者结合起来可以相当优雅地解决问题。 - user4815162342tree_view.queue_draw()
函数的方法即可解决问题。一个更智能的机制,只重新绘制树的一部分(或者如果没有可见变化,则不重新绘制任何内容)确实需要自定义TreeModel
实现。 - user4815162342