4

Treeview で選択範囲を上下に移動するにはどうすればよいですか?

アイデアは、選択範囲を 1 行上または 1 行下に移動するための上下ボタンを使用できるということです。

私の Treeview は ListStore を使用しています。それが重要かどうかはわかりません。

4

1 に答える 1

8

まず、慣れ親しんだ C コードを使用します。Python への翻訳に問題がある場合は、そう言ってください。最善を尽くしてお手伝いします。

これに使用するクラスはGtkTreeSelection. 基本的に、あなたがすることは次のとおりです。

  1. ビューの選択オブジェクトを取得 ( gtk_tree_view_get_selection)
  2. 現在選択されているGtkTreeIter( gtk_tree_selection_get_selected) を取得します。
  3. 次/前の iter を取得する ( gtk_tree_model_iter_next/previous)
  4. ある場合 (つまり、前の関数が true を返した場合)、それを現在選択されているものにします ( gtk_tree_selection_select_iter)

私の小さなテスト プログラムでは、「ダウン」ボタンのコールバックは次のようになりました。

static void on_down(GtkWidget *btn, gpointer user_data)
{
    GtkTreeSelection *sel = GTK_TREE_SELECTION(user_data);
    GtkTreeModel *model;
    GtkTreeIter current;

    gtk_tree_selection_get_selected(sel, &model, &current);
    if (gtk_tree_model_iter_next(model, &current))
        gtk_tree_selection_select_iter(sel, &current);
}

参照用の完全なプログラムは次のとおりです)

接続時に、TreeSelection オブジェクトをコールバックに渡しました。

編集:これは、Samuel Taylor が上記を Python に翻訳した方法です。

TreeView = Gtk.TreeView()
list = Gtk.ListStore(str, str)
TreeView.set_model(list)

def down(widget):
    selection = TreeView.get_selection()
    sel = selection.get_selected()
    if not sel[1] == None:
        next = list.iter_next(sel[1])
        if next:
            selection.select_iter(next)
于 2012-10-14T23:55:15.280 に答える