ツリー

2014年9月7日

ファイル

20-tree.tar.gz

内容

ツリーを作ります。基本はリストと同じです。gtk.ListStore() の代りに gtk.TreeStore() を使います。

gtk.TreeView の作成。

tree = gtk.TreeView()

ツリーの作成。

store = gtk.TreeStore(
        gobject.TYPE_STRING,
        gobject.TYPE_UINT,
        gobject.TYPE_BOOLEAN)
tree.set_model(store)

列の ID は次のように定義しています。

COLUMN_ITEM = 0
COLUMN_NUM = 1
COLUMN_VISIBLE = 2

ツリーの枝で "Num" 列を表示させないようにするために、COLUMN_VISIBLE をブーリアンとして定義しています。

列の追加。

renderer = gtk.CellRendererText()
renderer.set_data("column", COLUMN_ITEM)
column = gtk.TreeViewColumn(
        "Item", renderer,
        text=COLUMN_ITEM)
tree.append_column(column)

renderer = gtk.CellRendererText()
renderer.set_data("column", COLUMN_NUM)
renderer.set_property("editable", True)
column = gtk.TreeViewColumn(
        "Num", renderer,
        text=COLUMN_NUM,
        visible=COLUMN_VISIBLE)
tree.append_column(column)

表示の切り替えを指定できるように、"Num" 列で "visible" に COLUMN_VISIBLE を指定しています。

項目の追加。

iter = store.append(None)
store.set(iter,
        COLUMN_ITEM, "fruits",
        COLUMN_NUM, 0,
        COLUMN_VISIBLE, False)

citer = store.append(iter)
store.set(citer,
        COLUMN_ITEM, "apple",
        COLUMN_NUM, 1,
        COLUMN_VISIBLE, True)

citer = store.append(iter)
store.set(citer,
        COLUMN_ITEM, "lemon",
        COLUMN_NUM, 2,
        COLUMN_VISIBLE, True)

iter = store.append(None)
store.set(iter,
        COLUMN_ITEM, "animals",
        COLUMN_NUM, 0,
        COLUMN_VISIBLE, False)

citer = store.append(iter)
store.set(citer,
        COLUMN_ITEM, "cat",
        COLUMN_NUM, 3,
        COLUMN_VISIBLE, True)

citer = store.append(iter)
store.set(citer,
        COLUMN_ITEM, "penguin",
        COLUMN_NUM, 2,
        COLUMN_VISIBLE, True)

append() では、引数に親の gtk.TreeIter を指定します。親がない場合は None を指定します。たとえば、"fruits" は親を持たないので、append() で引数に None を指定しています。また、"fruits" は枝なので、set() で COLUMN_VISIBLE に False を指定して、"Num" の列を表示しないようにしています。

PyGTK プログラミング 目次へ