リスト

2014年9月7日

ファイル

19-list.tar.gz

内容

リストを作ります。gtk.TreeView を使います。

list = gtk.TreeView()

リストの作成には gtk.ListStore() を使います。

store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_UINT)
list.set_model(store)

gtk.ListStore() の引数は、列の数だけ列のデータタイプを指定しています。列の ID を次のように定義しています。

COLUMN_ITEM = 0
COLUMN_NUM = 1

列を追加します。

renderer = gtk.CellRendererText()
renderer.set_data("column", COLUMN_ITEM)
column = gtk.TreeViewColumn(
        "Item", renderer,
        text=COLUMN_ITEM)
list.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)
list.append_column(column)

set_data() で、後で使うために列 ID を設定しています。gtk.TreeViewColumn() の第 3 引数以降は属性のペアの列です。"Num" の列について、set_property() で "editable" に True を指定することで、列を編集可能にしています。編集された値を設定できるように、"edited" イベントを拾っておきます。

renderer.connect("edited", cellEdited, store)

リストに項目を追加します。

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

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

set() の第 3 引数以降は列の ID と値のペアです。

編集された値を有効にするには、"edited" イベントのコールバック関数で以下のようにします。

def cellEdited(cell, path, text, store):
    column = cell.get_data("column")

    if column == COLUMN_NUM:
        iter = store.get_iter(path)
        store.set(iter, COLUMN_NUM, int(text))

列の ID (set_data() で設定しておいたもの) を取得し、目的の列であれば、値を更新します。

PyGTK プログラミング 目次へ