Python GTK3 Treeview Переместить выделение вверх или вниз

Как переместить выделение вверх или вниз в Treeview?

Идея состоит в том, что у меня могут быть кнопки вверх и вниз для перемещения выделения вверх по строке или вниз по строке.

Мой Treeview использует ListStore. Не уверен, что это имеет значение.


person Samuel Taylor    schedule 14.10.2012    source источник
comment
Пробовали ли вы изменить порядок модели дерева (хранилище списка)?   -  person XORcist    schedule 14.10.2012
comment
Я думаю, что некоторые люди запутались в вашем редактировании, думая, что оно произвольно добавило код на другом языке, не прочитав сначала ваш вопрос. Я пошел дальше и сам добавил ваш код.   -  person Ancurio    schedule 15.10.2012


Ответы (1)


Во-первых, я буду использовать код 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 обратному вызову.

Редактировать: Вот как Сэмюэл Тейлор перевел приведенное выше на 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)
person Ancurio    schedule 14.10.2012