2012-10-14 2 views
3

Comment déplacer une sélection vers le haut ou vers le bas dans une vue arborescente? L'idée est que je peux avoir des boutons haut et bas pour déplacer la sélection vers le haut ou le bas d'une rangée.Python GTK3 Arborescence Déplacer la sélection vers le haut ou vers le bas

Mon Treeview utilise un ListStore. Je ne sais pas si cela compte.

+0

Avez-vous essayé commander à nouveau le modèle d'arbre (le magasin de la liste)? – XORcist

+0

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

Répondre

7

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:

  1. obtenir l'objet de sélection de la vue (gtk_tree_view_get_selection)
  2. Obtenez le GtkTreeIter actuellement sélectionné (gtk_tree_selection_get_selected).
  3. Aquire suivant/précédent iter (gtk_tree_model_iter_next/previous)
  4. 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, &current); 
    if (gtk_tree_model_iter_next(model, &current)) 
     gtk_tree_selection_select_iter(sel, &current); 
} 

(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) 
Questions connexes