4

如何在 Treeview 中向上或向下移动选择?

这个想法是我可以有一个向上和向下按钮来将选择向上或向下移动一行。

我的 Treeview 正在使用 ListStore。不确定这是否重要。

4

1 回答 1

8

首先,我将使用我熟悉的 C 代码。如果您在将其翻译成 Python 时遇到问题,请说出来,我会尽力提供帮助。

您要为此使用的类是GtkTreeSelection. 基本上,你要做的是:

  1. 获取视图的选择对象 ( gtk_tree_view_get_selection)
  2. 获取当前选中的GtkTreeIter( gtk_tree_selection_get_selected)。
  3. 获取下一个/上一个迭代器 ( 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 回答