pygtk で、tree view の表示内容を自由に編集する方法。
pygtk を使ってみてわかったこと。
ぐぐってもあまり出て来なかったので書いておく。
TreeView で、Model (TreeStore)に入っているデータをそのまま出すには、例えばアイコンなら、モデル(配列?)にアイコンを予め入れておいて、
tvc = gtk.TreeViewColumn('Entry 一覧')
tvc.add_attribute( cell, 'pixbuf', 2 )
などとして、アイコンを入れた配列の添字を指定すればいいけど、全部同じアイコンを表示したい時などはもったいない。また、モデルに入れるデータに意味を持たせたい時も困る。という訳で以下のように、set_cell_data_func()を使う。
以下の例では、アイコンと文字を表示するが、アイコンはみんな同じ、文字は配列の3番目の要素の内容で色がつきます。
# ----- TreeViewColumn tvc = gtk.TreeViewColumn('Entry 一覧') cell = gtk.CellRendererPixbuf() tvc.pack_start(cell, False ) icon = self.window.render_icon(gtk.STOCK_DND, gtk.ICON_SIZE_BUTTON) def _setTVPix( col, cell, model, itr ): cell.props.pixbuf = icon tvc.set_cell_data_func( cell, _setTVPix ) cell = gtk.CellRendererText() tvc.pack_start(cell, False ) def _setTVAttr( col, cell, model, itr ): colmap={ '0':'#000000', '1':'#0000ff', '2':'#006600', '3':'#ff0000' } cell.props.text = model.get(itr,0)[0] attr = model.get(itr,3 )[0] if attr == None: cell.props.foreground = 'black' else: cell.props.foreground = colmap[attr] tvc.set_cell_data_func( cell, _setTVAttr ) self.treeView.append_column(tvc)