我正在尝试编写以下代码:两列。一个包含itemId,另一个包含typeId。我想仅在typeId等于特定值时呈现itemId。
class IDRenderer(gtk.CellRendererText):
def __init__(self):
gtk.CellRendererText.__init__(self)
def do_render(self,window, widget, background_area, cell_area, expose_area, flags):
if ----} Condition to ask for value of the typeId - Cell {-----:
gtk.CellRendererText.do_render(self, window, widget, background_area, cell_area,
expose_area, flags)
gobject.type_register(IDRenderer)
我不知道如何获取当前渲染的行的iter,我需要确定typeId的值。这甚至可能吗?
答案 0 :(得分:2)
我现在发现了,感谢gimpIRC上的一个好人#pygtk:
你可以这样做,将所谓的单元数据函数绑定到相应的gtk.TreeViewColumn,就像在这个例子中所做的那样
def renderId(celllayout, cell, model, iter):
if model.get_value(iter,1) == 3:
cell.set_property('visible',True)
else:
cell.set_property('visible',False)
treeviewcolumn = gtk.TreeViewColumn()
renderer = gtk.CellRendererText()
treeviewcolumn.add_attribute(renderer,'text',0)
treeviewcolumn.set_cell_data_func(renderer,renderId)
我省略了一些与呈现完整树视图相关的代码,但我认为它显示了我想要做的以及如何做。
仅当第二个模型列(1)中的值等于3时,该列才会显示模型第一列(0)中的值
我希望这可以帮助某个人。
答案 1 :(得分:0)
据我所知,这是不可能的。您需要使用自定义渲染器的属性,该属性将由调用渲染功能的代码自动设置。 (与text
的{{1}}属性类似 - 渲染代码不从树模型中获取文本,但树模型在调用渲染之前设置渲染器的CellRendererText
属性代码。)