Доступ к gtk.TreeIter внутри render () Функция gtk.CellRenderer - pygtk - PullRequest
1 голос
/ 16 марта 2011

Я пытаюсь кодировать следующее: две колонки. Один содержит itemId, другой содержит typeId. Я хочу отображать itemId только тогда, когда typeId равен конкретному значению.


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 Это вообще возможно?

Ответы [ 2 ]

2 голосов
/ 22 марта 2011

Я теперь узнал, благодаря хорошему парню на #pygtk на gimpIRC:

Вы можете сделать это, связав так называемые функции данных ячейки с соответствующим 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)

Я опустил некоторый код, релевантный для отображения полного дерева, но я думаю, что он показывает, что я хотел сделать и как это сделать.

Столбец отображает значение в первом столбце (0) модели, только если значение во втором столбце модели (1) равно 3

Надеюсь, это поможет кому-нибудь когда-нибудь.

0 голосов
/ 17 марта 2011

Насколько я знаю, это невозможно. Вам необходимо использовать свойства пользовательского рендерера, который будет автоматически установлен кодом, вызывающим функцию рендеринга. (Подобно text свойству CellRendererText - код рендеринга не получает текст из древовидной модели, но древовидная модель устанавливает свойство text средства визуализации до вызова кода рендеринга.)

...