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