Как переместить выделение вверх или вниз в Treeview?
Идея состоит в том, что у меня могут быть кнопки вверх и вниз для перемещения выделения вверх по строке или вниз по строке.
Мой Treeview использует ListStore. Не уверен, что это имеет значение.
Как переместить выделение вверх или вниз в Treeview?
Идея состоит в том, что у меня могут быть кнопки вверх и вниз для перемещения выделения вверх по строке или вниз по строке.
Мой Treeview использует ListStore. Не уверен, что это имеет значение.
Во-первых, я буду использовать код C, так как это то, с чем я знаком. Если у вас возникнут проблемы с переводом на Python, скажите об этом, и я сделаю все возможное, чтобы помочь.
Вы хотите использовать для этого класс GtkTreeSelection
. В основном, что вы делаете, это:
gtk_tree_view_get_selection
)GtkTreeIter
(gtk_tree_selection_get_selected
).gtk_tree_model_iter_next/previous
)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, ¤t);
if (gtk_tree_model_iter_next(model, ¤t))
gtk_tree_selection_select_iter(sel, ¤t);
}
(здесь представлена полная программа для справки)
При подключении я передал объект 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)