我必须在树视图中显示一些数据。“真实”数据模型很大,我无法复制 TreeStore 中的所有内容,所以我想我应该使用 aGenericTreeModel
来充当虚拟树视图。顺便说一句,第一列是经典的图标+文本样式,我想我应该声明一个带有 CellRendererPixbuf 的列(常见问题示例on_get_n_columns()
) ,但我不确定模型方法on_get_value()
应该返回什么。它既是 Pixbuf 又是同一列的字符串值。
问问题
246 次
1 回答
0
查看教程,有一个将两个单元格渲染器打包到一列的示例。不同之处在于您使用的是自定义树模型,并且行为取决于您对模型进行建模的方式。如果您有一列带有文本,一列带有 pixbuf,您可以使用set_attributes
:
column = gtk.TreeViewColumn('Pixbuf and text')
cell1 = gtk.CellRenderText()
cell2 = gtk.CellRenderPixbuf()
column.pack_start(cell1, True)
column.pack_start(cell2, False)
column.set_attribute(cell1, 'text', 0) # the first column contains the text
column.set_attribute(cell2, 'pixbuf', 1) # the second column contains the pixbuf
否则,您可以拥有一个只有一列的树模型,其中包含您需要的所有对象,因此只需设置一个回调:
class MyObject:
def __init__(self, text, pixbuf):
self.text = text
self.pixbuf = pixbuf
def cell1_cb(col, cell, model, iter):
obj = model.get_value(iter)
cell.set_property('text', obj.text)
def cell2_cb(col, cell, model, iter):
obj = model.get_value(iter)
cell.set_property('pixbuf', obj.pixbuf)
column = gtk.TreeViewColumn('Pixbuf and text')
cell1 = gtk.CellRenderText()
cell2 = gtk.CellRenderPixbuf()
column.pack_start(cell1, True)
column.pack_start(cell2, False)
column.set_cell_data_func(cell1, cell1_cb)
column.set_cell_data_func(cell2, cell2_cb)
我希望我能给你一个关于你可以做什么的想法和一个起点。免责声明:我没有测试代码。
于 2010-04-29T09:55:50.563 回答