我正在尝试编码以下编码:两列。一个包含一个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的值。这甚至可能吗?

有帮助吗?

解决方案

我现在发现了,感谢Gimptirc上的#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)

我遵守了一些与完整的树景相关的代码,但是我认为它显示了我想做的事情以及如何做。

仅当第二个ModelColumn(1)中的值等于3时,该列仅在模型的第一列(0)中渲染值

我希望这可以帮助某人。

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top