翻訳して勉強するGtkチュートリアル第12章 Tree and List Widgets のパート2。ビューとセレクションを学習します。
12.2. ビュー
データモデルには異なるいくつかのモデルがありますが、扱うビューウィジェットは1つだけです。それは ListStore か TreeStore のどちらかで動作します。Gtk.TreeView の設定は難しいことではありません。Gtk.TreeView は、データがどこから取得されるかを知るために Gtk.TreeModel を必要とします。モデルの設定は Gtk.TreeView のコンストラクタにモデル名を渡すか、Gtk.TreeView.set_model() メソッドをコールして行います。
tree = Gtk.TreeView(store)
Gtk.TreeView ウィジェットがモデルを持つと、そのモデルを表示する方法を知る必要があります。これはカラムとセルレンダラを使って行います。
セルレンダラは、ツリーモデルのデータをある方法で描画するために使用されます。GTK+ にはいくつかのセルレンダラがあり、例えば Gtk.CellRendererText 、Gtk.CellRendererPixbuf 、Gtk.CellRendererToggle などがあります。さらに、カスタムレンダラを自分で書くのも比較的簡単です。
Gtk.TreeViewColumn は、Gtk.TreeView がビューの垂直方向のカラムを整理するために使用するオブジェクトです。このオブジェクトは、ユーザ用にラベルを付ける列の名前、どのタイプのセルレンダラを使うか、そしてモデルの指定された行からどのデータを取得するかを知る必要があります。
renderer = Gtk.CellRendererText()
column = Gtk.TreeViewColumn("Title", renderer, text=0)
tree.append_column(column)
ビューカラムに複数のモデルカラムをレンダリングするには、Gtk.TreeViewColumn のインスタンスを作成し、Gtk.TreeViewColumn.pack_start() を使用してモデルカラムをそこに追加する必要があります。
column = Gtk.TreeViewColumn("Title and Author")
title = Gtk.CellRendererText()
author = Gtk.CellRendererText()
column.pack_start(title, True)
column.pack_start(author, True)
column.add_attribute(title, "text", 0)
column.add_attribute(author, "text", 1)
tree.append_column(column)
12.3. セレクション
ほとんどのアプリケーションでは、データを表示するだけでなく、ユーザからの入力イベントを受信する必要があります。これを行うには、選択オブジェクトへの参照を取得し、“changed”シグナルに接続するだけです。
select = tree.get_selection()
select.connect("changed", on_tree_selection_changed)
次に、選択した行のデータを取得します。
def on_tree_selection_changed(selection):
model, treeiter = selection.get_selected()
if treeiter is not None:
print("You selected", model[treeiter][0])
どのような選択を許可するかは Gtk.TreeSelection.set_mode() を呼び出すことで制御できます。Gtk.TreeSelection.get_selected() は、選択モードが Gtk.SelectionMode.MULTIPLE に設定されている場合は動作しません。代わりに Gtk.TreeSelection.get_selected_rows() を使用してください。