Python GTK+3 チュートリアル

12. ツリーとリストウィジェット② View / Selection

翻訳して勉強する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() を使用してください。


関連記事