1

我正在尝试编写以下代码:两列。一个包含 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)

我不知道如何获取我需要确定 typeId 值的当前呈现行的 iter。这甚至可能吗?

4

2 回答 2

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) 中的值

我希望这可以帮助某人一段时间。

于 2011-03-22T00:18:41.993 回答
0

据我所知,这是不可能的。您需要使用自定义渲染器的属性,这些属性将由调用渲染函数的代码自动设置。(就像text属性CellRendererText——渲染代码不会从树模型中获取文本,但是树模型会text在调用渲染代码之前设置渲染器的属性。)

于 2011-03-17T10:32:54.190 回答