Tout d'abord, je vais utiliser le code C car c'est ce que je connais. Si vous avez des problèmes de traduction en Python, alors dites-le, et je ferai de mon mieux pour vous aider.
La classe que vous souhaitez utiliser pour cela est GtkTreeSelection
. Au fond, ce que vous faites est:
- obtenir l'objet de sélection de la vue (
gtk_tree_view_get_selection
)
- Obtenez le
GtkTreeIter
actuellement sélectionné (gtk_tree_selection_get_selected
).
- Aquire suivant/précédent iter (
gtk_tree_model_iter_next/previous
)
- S'il y a une (ie. Si la fonction précédente est revenu vrai), faire celui sélectionné (
gtk_tree_selection_select_iter
)
Dans mon petit programme de test , le rappel pour le bouton "down" ressemblait à ceci:
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);
}
(here est le programme complet de référence)
Lors de la connexion, j'ai transmis l'objet TreeSelection au rappel.
Edit: Voici comment Samuel Taylor traduit ci-dessus à 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)
Avez-vous essayé commander à nouveau le modèle d'arbre (le magasin de la liste)? – XORcist
Je pense que certaines personnes ont été confondues avec votre édition, pensant qu'il ajoutait arbitrairement du code dans une autre langue, sans avoir d'abord lu votre question. Je suis allé de l'avant et ajouté votre code moi-même. – Ancurio