1

次のコードを作成しようとしています: 2 つの列。1 つは itemId を含み、もう 1 つは 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)

完全なツリービューのレンダリングに関連するコードを省略しましたが、やりたいこととその方法を示していると思います。

この列は、モデルの 2 番目の列 (1) の値が 3 に等しい場合にのみ、モデルの最初の列 (0) の値をレンダリングします。

これがいつか誰かを助けることができることを願っています。

于 2011-03-22T00:18:41.993 に答える
0

私が知る限り、それは不可能です。レンダリング関数を呼び出すコードによって自動的に設定されるカスタム レンダラーのプロパティを使用する必要があります。(textプロパティのようにCellRendererText-- レンダリング コードはツリー モデルからテキストを取得しませんが、ツリー モデルtextはレンダリング コードを呼び出す前にレンダラーのプロパティを設定します。)

于 2011-03-17T10:32:54.190 に答える