1

ツリービューにいくつかのデータを表示する必要があります。「実際の」データ モデルは巨大で、TreeStore 内のすべてのものをコピーすることはできませんGenericTreeModelところで、最初の列は古典的なアイコン + テキスト スタイルであり、CellRendererPixbuf ( faq sample )を使用して列を宣言する必要があると思いますが、モデルのメソッドon_get_n_columns()on_get_value()戻り値がわかりません。これは、同じ列の Pixbuf と文字列値の両方です。

4

1 に答える 1

0

チュートリアルを見てください。2つのセルレンダラーを1つの列にパックする例があります。違いは、カスタムツリーモデルを使用しており、動作はモデルのモデル化方法によって異なることです。テキストを含む1つの列と、pixbufを含む1つの列がある場合は、次を使用できますset_attributes

column = gtk.TreeViewColumn('Pixbuf and text')
cell1 = gtk.CellRenderText()
cell2 = gtk.CellRenderPixbuf()
column.pack_start(cell1, True)
column.pack_start(cell2, False)
column.set_attribute(cell1, 'text', 0) # the first column contains the text
column.set_attribute(cell2, 'pixbuf', 1) # the second column contains the pixbuf

それ以外の場合は、必要なものがすべて含まれているオブジェクトを含む1つの列だけのツリーモデルを作成できるため、コールバックを設定するだけです。

class MyObject:
    def __init__(self, text, pixbuf):
        self.text = text
        self.pixbuf = pixbuf

def cell1_cb(col, cell, model, iter):
    obj = model.get_value(iter)
    cell.set_property('text', obj.text)

def cell2_cb(col, cell, model, iter):
    obj = model.get_value(iter)
    cell.set_property('pixbuf', obj.pixbuf)

column = gtk.TreeViewColumn('Pixbuf and text')
cell1 = gtk.CellRenderText()
cell2 = gtk.CellRenderPixbuf()
column.pack_start(cell1, True)
column.pack_start(cell2, False)
column.set_cell_data_func(cell1, cell1_cb)
column.set_cell_data_func(cell2, cell2_cb)

私はあなたにあなたが何ができるか、そして出発点についての考えをあなたに与えることを望みます。免責事項:私はコードをテストしませんでした。

于 2010-04-29T09:55:50.563 に答える